使用UNIX获取准确的单词

jucafojl  于 2022-11-04  发布在  Unix
关注(0)|答案(3)|浏览(198)

我想在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作为输出。有些东西是失踪,所以任何人都可以帮助我这个吗?

uxhixvfz

uxhixvfz1#

使用全字匹配选项:

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

来自grep手册:
-w,--字正则表达式
只选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行首,或前面有一个非单词组成字符。
正如注解中所指出的-w是一个GNU扩展。对于一个非GNU grep,你可以使用word boundaries

grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
jexiocij

jexiocij2#

单词边界匹配是标准POSIX grep实用程序的一个扩展。它可能可用,也可能不可用。如果你想以可移植的方式搜索单词,我建议你研究一下perl,在那里你可以使用

perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt
z9zf31ra

z9zf31ra3#

您可以在正则表达式中使用单词边界(\b)来匹配精确的单词。要启用扩展正则表达式,请在grep中使用-E标志。
解决方法:

grep -E "\baaa\b" $EAT_Setup_BJ3/Log.txt

相关问题