(小tip)grep中坑爹的正则表达式

今天上午被grep中的正则表达式坑了半天,今晚就小结一下吧。

1、在grep和sed中,\t和\s都是无效的,要表示制表符和空格,只能直接敲入tab和空格键,这个在shell脚本中还好说,在命令行模式下就比较麻烦了,因为tab默认是会智能补全命令的,所以要在按tab之前按下ctrl+v,就可以把tab打出来了。

2、egrep和grep -E是等效的,egrep相比grep对正则表达式有了一些扩展支持,具体包括一下几点(其实这些特性grep是可以用的,只不过要在元字符前面加上转义符,比如用到+时,应敲入\+):

+:匹配一个或多个先前的字符。如:'[a-z]+able’,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

?:匹配零个或多个先前的字符。如:’gr?p’匹配gr后跟一个或没有字符,然后是p的行。

a|b|c :匹配a或b或c。如:grep|sed匹配grep或sed

():分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个v。

x{m},x{m,},x{m,n}:作用同x\{m\},x\{m,\},x\{m,n\}

3、grep还支持一些POSIX字符类,也一并记录如下吧,虽然平时应该不大可能用到:

[:alnum:]:文字数字字符

[:alpha:]:文字字符

[:digit:]:数字字符

[:graph:]:非空字符(非空格、控制字符)

[:lower:]:小写字符

[:cntrl:]:控制字符

[:print:]:非空字符(包括空格)

[:punct:]:标点符号

[:space:]:所有空白字符(新行,空格,制表符)

[:upper:]:大写字符

[:xdigit:]:十六进制数字(0-9,a-f,A-F)

这篇文章主要参考了一篇博文(不过原出处就不知道是哪了,反正遵守GPL协议……要是一开始就看到这篇文章,也许就不会白白浪费一个上午了=_=

This entry was posted in linux and tagged . Bookmark the permalink.

1 Response to (小tip)grep中坑爹的正则表达式

  1. ihipop says:

    其实折腾那么多干嘛呢。
    perl风格的表达式才是最常用的。而且grep也支持
    使用grep -P 即可。
    PS:如果你使用的还是老掉牙的RHEL/CentOS5系列,抱歉你享受不到~!

Leave a Reply

Your email address will not be published. Required fields are marked *