使用UNIX对精确单词进行Grepping
我想在Unix中搜索确切的单词模式。 示例:使用UNIX对精确单词进行Grepping,unix,grep,Unix,Grep,我想在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作为输出。 缺少一些内容,请任何人帮我解决这个问题吗?使用全字选项:
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作为输出。
缺少一些内容,请任何人帮我解决这个问题吗?使用全字选项:
grep -c -w aaa $EAT_Setup_BJ3/Log.txt
从grep
手册:
-w、 --word regexp
仅选择包含构成整词的匹配项的行。测试是匹配的子字符串必须
可以在行首,也可以在非单词组成字符之前
如注释-w
中所述,它是GNU扩展。对于非GNU grep,您可以使用单词边界
:
grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt
grep-c“\”$EAT\u Setup\u BJ3/Log.txt
单词边界匹配是标准POSIX grep实用程序的扩展。它可能可用,也可能不可用。如果您想以可移植的方式搜索单词,我建议您改为使用perl
perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt
请注意,-w是一个GNUism,不是标准的POSIX grep选项。请注意,与
\
匹配的单词边界也不是POSIX。一个更“可移植”的解决方案是perl一行。如果我遇到grep的问题,我使用了上面提到的代码:grep-c-w aaa$Log.txt==>但它也包括了诸如:ccc aaa等词。。我只想计算aaa模式,特别是不计算bbb aaa或ccc_aaa模式。。。“那么,有人来帮我吗?”詹斯说,是的。然而,在某些情况下,可能确实需要模拟单词边界,例如。G在矿山,考虑到(传统的)awk
既不支持\b
也不支持\y
(后者用于gawk
)。而那些只与GNU工具(及其扩展)一起工作的脚本是我最讨厌的,所以我的regexp有时看起来非常复杂,但它们也不需要扩展regexp。值得一提的是,我只是在Solaris、AIX和Linux上尝试了-w
,并且在所有3个平台上都能工作<代码>\没有(在Solaris上工作,AIX不喜欢)。应该怎么做?它当然不计算匹配的数量。它记录grep的退出状态。对于正则表达式,它应该是“/\baaa\b/”\W搜索一个不是单词字符的字符,这样它就可以引起一些奇怪的行为;特别是如果你正在做匹配的反向引用\b将找到一个单词边界(基本上是一样的,但更坚固,不匹配字符)。@whitey04谢谢你的有用观察。我已经相应地调整了正则表达式。