我想在Unix中搜索Exact word pattern。
示例: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作为输出。 有些东西不见了,所以有人可以帮我这个吗?
答案 0 :(得分:29)
使用全字选项:
grep -c -w aaa $EAT_Setup_BJ3/Log.txt
来自grep
手册:
-w, - word-regexp
仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须 要么在行的开头,要么在非单词构成字符之前。
如评论-w
中所述,是GNU扩展。使用非GNU grep,您可以使用word boundaries
:
grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
答案 1 :(得分:7)
Word边界匹配是标准POSIX grep实用程序的扩展。它可能是否可用。如果你想要便携地搜索单词,我建议你看一下perl,你会在哪里使用
perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt