我有一个文件,我想查找传入的单词的总出现次数,同时支持正则表达式
grep -e "Hello*" filename | wc -w
但是有一些错误,我想说我做了类似
的事情grep -e "H" filename | wc -w
它应该只匹配完全H而不计算以H开头的东西,就像grep现在这样做。
任何人都知道怎么做?
答案 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