[英]Problems piping sed output to grep through xargs
我有问题管道sed
输出与grep
通过xargs
一起使用。 我认为这是一个可变扩展的问题,但我不确定。
方案如下。 当前目录包含以下文件:
file1.log
file1.log.67654
file2.log
file2.log.66876
file3.log
file3.log.56768
...
从这些文件中,只有一些以.log
结尾的文件包含某个字符串,以便:
$ grep -l "certainString"
file1.log
file3.log
我想要的是找到这些文件中有多少或者那些以这些文件开头但有额外的.numbers
作为扩展名的文件(本例中为文件file1.log
, file1.log.67654
, file3.log
和file3.log.56768
)包含另一个字符串
我以为这个命令会这样做:
grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
但经过我顶替log
与log*
与sed
, xargs
不扩大*
,但字面上inteprets它,因此:
$ grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
grep: ./file1.log*: No such file or directory
grep: ./file3.log*: No such file or directory
我已经读过这个,人们建议使用类似的东西:
grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString"'
但是我不能让它发挥作用(说实话,我并不完全理解它)。 我觉得我就在那里,但我错过了一个细节。 有帮助吗?
以防文件名不包含空格或globbing metacharater( * [ ]
)
只需添加@
,因为-I@
表示@
是要被参数替换的标记
grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString" @'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.