Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Linux gz文件的递归grep从输出字符串搜索字符串_Linux_Bash_Grep_Cat - Fatal编程技术网

Linux gz文件的递归grep从输出字符串搜索字符串

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

我正试图在递归搜索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 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'