使用UNIX获取精确单词

Bhu*_*n J 12 unix grep

我想在Unix中搜索Exact word pattern.示例:Log.txtfile包含以下文本:

aaa
bbb
cccaaa   ---> this should not be counted in grep output looking for aaa
Run Code Online (Sandbox Code Playgroud)

我使用以下代码:

count=$?
count=$(grep -c aaa $EAT_Setup_BJ3/Log.txt)
Run Code Online (Sandbox Code Playgroud)

这里输出应该是==> 1而不是2,使用上面的代码我得到2作为输出.有些东西不见了,所以有人可以帮我这个吗?

Atr*_*opo 32

使用全字选项:

grep -c  -w aaa $EAT_Setup_BJ3/Log.txt
Run Code Online (Sandbox Code Playgroud)

grep手册:

-w, - word-regexp

仅选择包含构成整个单词的匹配项的行.测试是匹配的子字符串必须位于行的开头,或者前面是非单词构成字符.

正如评论中所指出的那样-w是GNU扩展.使用非GNU grep,您可以使用word boundaries:

grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
Run Code Online (Sandbox Code Playgroud)

  • 请注意,-w是GNUism,而不是标准的POSIX grep选项. (3认同)

Jen*_*ens 7

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

perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt
Run Code Online (Sandbox Code Playgroud)