Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用UNIX对精确单词进行Grepping_Unix_Grep - Fatal编程技术网

使用UNIX对精确单词进行Grepping

使用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作为输出。 缺少一些内容,请任何人帮我解决这个问题吗?使用全字选项:

我想在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作为输出。 缺少一些内容,请任何人帮我解决这个问题吗?

使用全字选项:

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谢谢你的有用观察。我已经相应地调整了正则表达式。