14

我想在 Unix 中搜索确切的单词模式。示例:Log.txt文件包含以下文本:

aaa
bbb
cccaaa   ---> this should not be counted in grep output looking for aaa

我正在使用以下代码:

count=$?
count=$(grep -c aaa $EAT_Setup_BJ3/Log.txt)

这里的输出应该是 ==> 1 而不是 2,使用上面的代码我得到 2 作为输出。缺少一些东西,所以有人可以帮我解决这个问题吗?

4

2 回答 2

36

使用整个单词选项:

grep -c  -w aaa $EAT_Setup_BJ3/Log.txt

grep手册:

-w, --word-正则表达式

仅选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须在行首,或者前面有一个非单词组成字符。

如评论中所述,-w是 GNU 扩展。使用非 GNU grep,您可以使用word boundaries

grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
于 2013-04-02T07:45:55.360 回答
7

字边界匹配是标准 POSIX grep 实用程序的扩展。它可能可用或不可用。如果你想便携地搜索单词,我建议你改用 perl,你会在哪里使用

perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt
于 2013-04-02T08:33:05.013 回答