免费注册 查看新帖 |

Chinaunix

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

请教一个grep正则表达式字符串匹配的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-30 18:23 |只看该作者 |倒序浏览
有这样一个文件date.txt
linux-mwok:~/shell> cat date.txt  
yrend.AS
mount
soa.PP
qp.RR
ST.CPP
sT.cpp

我键入如下命令 grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}' date.txt  
目的是匹配文件中 以1-6个小写字母开头, .之后是1-2个大写字母 这样的字符串。
我的预期结果应该是匹配到: yrend.AS soa.PP qp.RR 这几个字符串,
可实际匹配结果是:yrend.AS soa.PP qp.RR ST.CPPP sT.cpp  

请大家帮忙看看我哪里写错了?麻烦正确的匹配语句写一下贴出来,谢谢!

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
2 [报告]
发表于 2011-08-30 19:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2011-08-30 19:04 |只看该作者
正则表达式 REGULAR EXPRESSIONS
       一个正则表达式是一个描述了一个字符串集合的模式。正则表达式的构造类似于算术表达式,使用各种各样的操作符来将更小的表达式连在一起。
       Grep 能理解两种不同版本的正则表达式语法:"basic" 和 "extended"。在 GNU grep 中,两种语法可以实现的功能是没有区别的。在其他实现中,基本 (basic)  正则表达式表达能力要弱一点。下面的描述适用于扩展的 (extended) 正则表达式,它与基本正则表达式的区别会在最后做一个总结。
       基本的构造块是匹配单个字符的正则表达式。大部分字符,包括所有字母和数字,是匹配它们自身的正则表达式。任何具有特殊含义的元字符可以通过前置一个反斜杠来引用。(may be quoted by preceding it with a backslash.)
       方括号表达式 (bracket) 是一个字符序列,放在 [ 和 ] 当中。它匹配序列中的任何一个字符;如果序列中的第一个字符是脱字符 (caret) ^ 那么它匹配 不在序列中的任何一个字符。例如,正则表达式 [0123456789] 匹配任何一个数字。
       在方括号表达式之中,一个 范围表达式 (range) 由两个字符组成,中间用一个连字符 (hyphen) 分隔。它匹配在这两个字符之间的任何一个字符,使用本地化的序列顺序和字符集。(that sorts between the two characters,inclusive, using the locale's collating sequence and character set.) 例如,在默认的 C locale中 , [a-d] 与 [abcd] 等价。典型的,许多 locale 将字符以字典顺序排序,在这些 locale 中, [a-d] 不与 [abcd] 等价;例如它可能与 [aBbCcDd] 等价。要获 得传统的对方括号表达式的解释,可以设定环境变量 LC_ALL 值为 C 来使用 locale C 。

       最后,在方括号表达式中有一些预定义的字符类,如下所示。它们的名字是自说明的,它们是 [:alnum:](字母和数字), [:alpha:](字母), [:cntrl:](), [:digit:]( 数 字),  [:graph:](),  [:lower:]( 小 写 字 母),  [:print:]( 可打印字符), [:punct:](), [:space:](空格), [:upper:](大写字母), 和 [digit:] 。例如, [[:alnum:]] 意思是 [0-9A-Za-z] ,但是后一种表示方法依赖于 locale C 和ASCII 字符编码,而前一种是与 locale 和字符集无关的。(注意这些字符类名中的方括 号也是符号名称的一部分,必须包含在用来为序列定界的方括号之中。)

评分

参与人数 1可用积分 +2 收起 理由
rdcwayx + 2 感谢分享

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2011-08-30 19:06 |只看该作者
要用到比较麻烦的正则表达式还是用sed好一点,grep的流派挺怪的

论坛徽章:
0
5 [报告]
发表于 2011-08-30 19:22 |只看该作者
我这边没有问题

论坛徽章:
0
6 [报告]
发表于 2011-08-30 19:31 |只看该作者
'^[a-z]\{1,6\}\.[A-Z]\{1,2\}$'  你少个$吧

论坛徽章:
0
7 [报告]
发表于 2011-08-31 00:09 |只看该作者
我这也没问题。。

论坛徽章:
1
双子座
日期:2013-10-17 00:46:45
8 [报告]
发表于 2011-08-31 00:39 |只看该作者
回复 3# mpstat


    说谁的回帖这么犀利呢?
    叉。。。又换头像了?

论坛徽章:
0
9 [报告]
发表于 2011-08-31 09:20 |只看该作者
6楼正解,我少了个$符号, 应该是这样的
grep  '^[a-z]\{1,6\}\.[A-Z]\{1,2\}$'

谢谢大家!

论坛徽章:
0
10 [报告]
发表于 2011-08-31 10:04 |只看该作者
回复 9# wang_qiao_ying


    这不是$的问题
  1. [iscs@fsbcc34]:/users/iscs>$ cat file
  2. yrend.AS
  3. mount
  4. soa.PP
  5. qp.RR
  6. ST.CPP
  7. sT.cpp
  8. aa.cc
  9. [iscs@fsbcc34]:/users/iscs>$ grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}aa.cc一样grep得出来 file
  10. yrend.AS
  11. soa.PP
  12. qp.RR
  13. aa.cc
复制代码
aa.cc一样grep得出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP