免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2888 | 回复: 11
打印 上一主题 下一主题

[文本处理] 正则新手有点蒙 [复制链接]

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-09 09:17 |只看该作者 |倒序浏览
本帖最后由 Kasiotao 于 2014-07-09 09:24 编辑

今天好好系统的看了下正则表达式,然后一个一个的练习,在遇到{m} {m,} {m,n}的时候出了问题
testfile的内容如下
smaller
smal{2}er
tal
faster
yes
no

按照花括号的意义
  1. grep 'l\{2\}' testfile
复制代码
  1. sed -n '/l\{2\}/p' testfile
复制代码
都可以成功匹配到smaller
  1. grep 'l{2}' testfile
复制代码
  1. sed -n '/l{2}/p' testfile
复制代码
匹配到smal{2}er

但是用awk时
  1. awk '/l\{2\}/' testfile
复制代码
  1. awk '/l{2}/' testfile
复制代码
都匹配到了smal{2}er,不明白了,然后看了看以前的帖子,在定义FS的时候,由于shell和awk都要转意,所以有时候需要awk -F'\\\\' 以为是awk转义的问题于是试了试
  1. awk '/l\\{2\\}/' testfile
复制代码
这次什么都不打印了。。。有点不明白了,求大大们指点下,谢啦

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2014-07-09 09:25 |只看该作者
回复 1# Kasiotao


awk 的 {n,m} 有点坑

       r{n,m}     One or two numbers inside braces denote an interval expression.  If there is one number in the braces, the preceding regular expression r  is
                  repeated  n  times.   If there are two numbers separated by a comma, r is repeated n to m times.  If there is one number followed by a comma,
                  then r is repeated at least n times.
                  Interval expressions are only available if either --posix or --re-interval is specified on the command line.

你需要这样写:

awk --posix '/l{2}/'

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2014-07-09 09:31 |只看该作者
回复 1# Kasiotao
awk要用{n,m}要加--posix或--re-interval
  1. r{n,m}     One  or two numbers inside braces denote an interval expres-
  2.                   sion.  If there is one number in the braces,  the  preceding
  3.                   regular  expression r is repeated n times.  If there are two
  4.                   numbers separated by a comma, r is repeated n  to  m  times.
  5.                   If  there  is  one  number  followed  by  a comma, then r is
  6.                   repeated at least n times.
  7.                  [backcolor=DarkOrange] Interval expressions are only available if either --posix or
  8.                   --re-interval is specified on the command line[/backcolor].
复制代码
  1. [masonzhu@rat122 ~]$ echo -e "smaller\nsmal{2}er"|awk --posix '/l{2}/'
  2. smaller
  3. [masonzhu@rat122 ~]$ echo -e "smaller\nsmal{2}er"|awk --re-interval '/l{2}/'
  4. smaller
复制代码

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
4 [报告]
发表于 2014-07-09 09:40 |只看该作者
回复 2# ly5066113
原来如此。。。man上讲了很清楚,以后遇到问题要先自己弄明白~~谢谢嘿嘿

   

论坛徽章:
0
5 [报告]
发表于 2014-07-09 12:32 |只看该作者
awk、sed、grep这几个的正则全不一样,我觉得挺坑的,有时一个上能用另一个上就不能用,而且分不清,只能每次现调试

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
6 [报告]
发表于 2014-07-09 14:02 |只看该作者
回复 5# 用户名注册后不能更改


    就是,那为大神能给统一下

论坛徽章:
0
7 [报告]
发表于 2014-07-09 14:41 |只看该作者
回复 6# jeffreyst

记得gawk的正则引擎还是比较先进的,好像是DFA和NFA混合,但是……
唉,总之都有-P就好了。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
8 [报告]
发表于 2014-07-09 14:48 |只看该作者
回复 7# 用户名注册后不能更改


    是啊,都是用Perl正则多好
    老是搞不清几个正则流派的细微差别,每次都试来试去,好蛋疼~

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
9 [报告]
发表于 2014-07-09 15:29 |只看该作者
我是来学习的。专业看神贴。。。这次又学到东西了

论坛徽章:
0
10 [报告]
发表于 2014-07-09 15:54 |只看该作者
回复 8# jeffreyst

《精通正则表达式》中详细介绍了NFA、POSIX NFA、DFA三款正则引擎的差别。
但是喵的闹不清哪个程序用哪个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP