Linux gz文件的递归grep从输出字符串搜索字符串
我正试图在递归搜索gz文件文件夹中从字符串的输出中搜索字符串 我正在使用仅起作用的命令:Linux gz文件的递归grep从输出字符串搜索字符串,linux,bash,grep,cat,Linux,Bash,Grep,Cat,我正试图在递归搜索gz文件文件夹中从字符串的输出中搜索字符串 我正在使用仅起作用的命令: find . -name "*.gz" -exec zgrep -H 'PATTERN' \{\} \; 从 我怎样才能做到这一点,就像使用普通grep和管道一样,如下所示 cat <folder> | grep 'pattern1' | grep 'pattern2' cat | grep'模式1 | grep'模式2' 关于您的具体问题 How can I make this happe
find . -name "*.gz" -exec zgrep -H 'PATTERN' \{\} \;
从
我怎样才能做到这一点,就像使用普通grep和管道一样,如下所示
cat <folder> | grep 'pattern1' | grep 'pattern2'
cat | grep'模式1 | grep'模式2'
关于您的具体问题
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
):
您可以通过第二个grep管道查找结果:
find-名称“*.gz”-exec zgrep-H“PATTERN1”{}\|grep“PATTERN2”
你的“伪代码”(cat | 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
将导致:pattern2pattern3这一行
。如果这是你想要的,我们可以用
zcat file.gz | grep 'pattern1' | grep 'pattern2'
但是如果我们查看查找-名称“*.gz”-exec zgrep-H'模式“\{\}”代码>它甚至不接近samt,因为它更像:
cat /**.*txt | grep 'pattern'
它本身有点特殊,samt结果将由
grep -R 'pattern'
然后我会在.gz的情况下这样说(不确定/***.gz是否能与zcat一起工作)
你的问题不清楚。您的初始命令查看(tar.gz?)压缩文件中的多个文件,搜索单个模式,但您的伪代码在单个文件中查找多个模式。它是哪一个?如果您希望这是文件名,您应该从\{\}
中删除\
。如果要执行多个grep
命令的管道,可以将其放入类似zgrep-H'pattern1'$@“| grep'pattern2'
的脚本中,并使用-exec script{}代码>
cat /**.*txt | grep 'pattern'
grep -R 'pattern'
zcat /**/*.gz | grep 'pattern'