我正在尝试通过gz文件文件夹的递归搜索从字符串输出中搜索字符串。
我使用的命令仅适用于
find . -name "*.gz" -exec zgrep -H 'PATTERN' \{\} \;
来自find string inside a gzipped file in a folder
我怎样才能做到这一点,就像在管道上正常使用grep一样?
cat <folder> | grep 'pattern1' | grep 'pattern2'
答案 0 :(得分:0)
关于您的具体问题
How can I make this happen just like using normal grep with pipe: cat | grep 'pattern1' | grep 'pattern2'
您可以使用find
先将cat
的所有文件,然后再grep
,但这不是很好,因为您只会得到没有文件名的结果行。
最好只使用两个grep命令:
zgrep 'pattern1' *.gz | grep 'pattern2'
如果要包括子目录,可以使用globstar(假设您正在运行bash
):
shopt -s globstar
zgrep 'pattern1' **.gz | grep 'pattern2'
答案 1 :(得分:0)
您可以通过第二个grep传递查找结果:
find . -name "*.gz" -exec zgrep -H "PATTERN1" {} \; | grep "PATTERN2"
答案 2 :(得分:0)
您的“伪代码”(猫| grep'pattern2'| grep'pattern3')是什么意思?
如果我们的文件file.txt包含:
pattern this text on the line <br>
pattern2 this text on the line <br>
this pattern3 <br>
pattern2pattern3 this line
然后输入您的“伪代码”
cat file.txt | grep 'pattern2' | grep 'pattern3'
将导致:pattern2pattern3 this line
。如果这是您想要的,我们可以使用
zcat file.gz | grep 'pattern1' | grep 'pattern2'
但是但是,如果我们看一下find . -name "*.gz" -exec zgrep -H 'PATTERN' \{\} \;
,它甚至还不很接近,这更像是:
cat /**.*txt | grep 'pattern'
它本身有点特殊,它的结果将由
给出grep -R 'pattern'
然后在.gz情况下我会这样说(不确定/**/*.gz是否可与zcat一起使用)
zcat /**/*.gz | grep 'pattern'