将sed输出通过xargs输出到grep的问题

问题描述 投票:0回答:1

我有问题管道sed输出通过grepxargs一起使用。我认为这是一个可变扩展的问题,但我不确定。

方案如下。当前目录包含以下文件:

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.logfile1.log.67654file3.logfile3.log.56768在这个例子中)包含另一个字符串。

我以为这个命令会这样做:

grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"

但是在我用loglog*替换sed之后,xargs没有扩展*但是从字面上解释它,因此:

$ 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"'

但是我不能让它发挥作用(说实话,我并不完全理解它)。我觉得我就在那里,但我错过了一个细节。有帮助吗?

bash shell sed grep xargs
1个回答
0
投票

如果文件名不包含空格或globbing metacharater(* [ ]

只需添加@,因为-I@意味着@是一个被参数替换的标记

grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString" @'
© www.soinside.com 2019 - 2024. All rights reserved.