我想在Unix中搜索精确的单词模式。例如:Log.txt文件包含以下文本:
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作为输出。有些东西是失踪,所以任何人都可以帮助我这个吗?
uxhixvfz1#
使用全字匹配选项:
grep -c -w aaa $EAT_Setup_BJ3/Log.txt
来自grep手册:-w,--字正则表达式只选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行首,或前面有一个非单词组成字符。正如注解中所指出的-w是一个GNU扩展。对于一个非GNU grep,你可以使用word boundaries:
grep
-w
word boundaries
grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
jexiocij2#
单词边界匹配是标准POSIX grep实用程序的一个扩展。它可能可用,也可能不可用。如果你想以可移植的方式搜索单词,我建议你研究一下perl,在那里你可以使用
perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt
z9zf31ra3#
您可以在正则表达式中使用单词边界(\b)来匹配精确的单词。要启用扩展正则表达式,请在grep中使用-E标志。解决方法:
\b
-E
grep -E "\baaa\b" $EAT_Setup_BJ3/Log.txt
3条答案
按热度按时间uxhixvfz1#
使用全字匹配选项:
来自
grep
手册:-w,--字正则表达式
只选择那些包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行首,或前面有一个非单词组成字符。
正如注解中所指出的
-w
是一个GNU扩展。对于一个非GNU grep,你可以使用word boundaries
:jexiocij2#
单词边界匹配是标准POSIX grep实用程序的一个扩展。它可能可用,也可能不可用。如果你想以可移植的方式搜索单词,我建议你研究一下perl,在那里你可以使用
z9zf31ra3#
您可以在正则表达式中使用单词边界(
\b
)来匹配精确的单词。要启用扩展正则表达式,请在grep中使用-E
标志。解决方法: