2011-08-30 45 views
0
$ echo 'HI' | grep '\w*' 
HI 
$ echo 'HI' | grep '\w+' 
$ echo 'HI' | grep '\w{2}' 

对于案例2 & 3,grep必须返回'HI',但不返回任何内容。我在寻求什么是错的?grep with linux中的正则表达式功能

+2

是的,有什么问题。你读过你收到的回复了吗?在grep的正则表达式语法中,'\ w'匹配文字w,'+'匹配文字加号。 (在这种情况下,无论如何都是多余的,因为如果匹配的话grep会打印整个输入行)。您正在寻找'echo hi | grep -i'[a-z]''或者如果你真的坚持使用Perl的正则表达式'echo hi | perl -ne'print if/\ w /'' – tripleee

+0

GNU'grep'支持'-G'(BRE:基本正则表达式),'-E'(ERE:扩展正则表达式),'-F'(固定字符串,但是可以选择其中的很多)和'-P'(Perl正则表达式 - 尽管它没有明确说明Perl的哪个版本)。如果你有GNU'grep'并且想要Perl风格的正则表达式,可以使用'grep -P'^ \ w {2} $''或其他什么。 –

回答

3

纯正形式的正则表达式正是Global Regular Expression Print所支持的。在80年代后期,在grep创建近20年后,Perl正则表达式引入了\w转义。 GNU grep套件在其文档中提到了一个命令pgrep,但您可能最好不要学习差异,并学习使用grep传统的正则表达式。

+2

只需添加一个-P开关打开PCRE(Perl兼容正则表达式) – magnetar