如何让GNU grep与“H”完全匹配而不是以“H”开头的东西?

时间:2013-05-06 15:18:08

标签: regex grep

我有一个文件,我想查找传入的单词的总出现次数,同时支持正则表达式

grep -e "Hello*" filename | wc -w 

但是有一些错误,我想说我做了类似

的事情
grep -e "H" filename | wc -w 

它应该只匹配完全H而不计算以H开头的东西,就像grep现在这样做。

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:4)

试试这个:

grep '\bH\b'

e.g:

kent$  echo "Hello
IamH
we need this H
and this H too"|grep '\bH\b'
we need this H
and this H too

请注意,如果您只想计算匹配的字词,则需要在-o上使用grep选项。 (thx fotanus)

修改

您可以按grep -o获取所有匹配的字词,在这种情况下,-c无效,因为它会计算匹配的行数。您可以将grep -o传递给wc -l

例如:

kent$  echo "No Hfoo will be counted this line
this line has many: H H H H H H H (7)
H (8 starting)
foo bar (9 ending) H
H"|grep -o '\bH\b'|wc -l
10

或更简单,使用awk的单一流程解决方案

awk '{s+=gsub(/\<H\>/,"")}END{print s}' file

同样的例子:

kent$  echo "No Hfoo will be counted this line
this line has many: H H H H H H H (7)
H (8 starting)
foo bar (9 ending) H
H"|awk '{s+=gsub(/\<H\>/,"")}END{print s}'                                                                                                                                  
10