2013-05-06 161 views
-1

我找到了解决How do I get GNU grep to match exactly "H" and not things that just start with "H"?感谢肯特使用下列内容:支持正则表达式的GNU grep。

grep -o '\bH\b'|wc -l 

,但我需要支持正则表达式,所以像

grep -o '\bH*\b'|wc -l 

应符合喜欢你好的东西,嗨,等支持所有的正则表达式。

我认为-e选项可以做到这一点,但它不起作用。有人有主意吗?

+2

'-e'只是让你指定一个或多个模式来匹配。虽然我明白你要完成什么,但问你是否可以拥有“支持正则表达式的GNU grep”有点像问你是否可以买一辆能驱动的汽车:) – dimo414 2013-05-06 22:55:06

+0

'\ bH \ b'**是* *一个有效的正则表达式,它恰好不会使用任何通配符或量词。 – tink 2013-05-06 23:05:39

回答

1

试图改变

grep -o '\bH*\b'|wc -l 

grep -oP '\bH.*?\b'|wc -l 

H*将匹配H HH HHH HHH or empty string

\bH.*?\b将匹配H Hi Hallo Hello H_x_手段,其次是无词边界字符H,直到下一个\b

,如果你只是想匹配的字母,使用\bH[a-zA-Z]*\b

编辑

添加例如:

kent$ echo "H Hfoo Hbar xafHHH"|grep -Po '\bH.*?\b' 
H 
Hfoo 
Hbar 
+0

这是否支持所有的正则表达式? – Oujk 2013-05-06 22:54:55

+0

@Oujk你被正则表达式和glob混淆了。 'ls foo *'列出所有以'foo'开头的文件,它是glob的。但是,如果你说正则表达式,'foo *'匹配'foo,foooo,fooooooooo,foo'你可以谷歌的一些正则表达式教程获得一些基本的正则表达式的知识。 – Kent 2013-05-06 23:00:13

+0

我想我很想明白,谢谢。 – Oujk 2013-05-06 23:05:54