0

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

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

但是有一些错误,我假设我做了类似的事情

grep -e "H" filename | wc -w 

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

有谁知道怎么做?

4

1 回答 1

4

尝试这个:

grep '\bH\b'

例如:

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

请注意,如果您只想计算匹配的单词,则需要使用-ooption on grep。(谢谢 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
于 2013-05-06T15:26:03.410 回答