Bash 递归地grep zip文件列表中的模式
我在命令行中使用以下命令来获得模式匹配的行Bash 递归地grep zip文件列表中的模式,bash,unix,command-line,grep,Bash,Unix,Command Line,Grep,我在命令行中使用以下命令来获得模式匹配的行 find . -name "*.gz"|xargs gzcat|grep -e "pattern1" -e "pattern2" 我现在只需要找到模式存在的文件名。 如何在命令行上执行此操作 grel-l没有用,因为我在bash中使用xargs gzcat之前,我会这样做(未经测试): 未经测试;内部的所有内容都找到了吗?因此,如果您有大量的gz文件,那么您就不会有性能问题,因为每次gzcat/grep找到文件后,都会立即运行,但没有输出任何文件:
find . -name "*.gz"|xargs gzcat|grep -e "pattern1" -e "pattern2"
我现在只需要找到模式存在的文件名。
如何在命令行上执行此操作
grel-l
没有用,因为我在bash中使用xargs gzcat
之前,我会这样做(未经测试):
未经测试;内部的所有内容都找到了吗?因此,如果您有大量的gz文件,那么您就不会有性能问题,因为每次gzcat/grep找到文件后,都会立即运行,但没有输出任何文件:
find . -iname '*.gz' -exec bash -c 'gzcat $1 | grep -q -e "pattern1" -e "pattern2" && echo $1' {} {} \;
检查是否有zgrep可用。然后,如果是:
find . -name '*.gz' -exec zgrep -l -e ".." -e ".." {} +
如果您没有它——好吧,只需从拥有它的机器上复制它(我使用的所有linuxes默认都有)——这是一个简单的bash脚本
使用ripgrep
,例如,它非常有效,特别是对于大型文件:
rg -z -e "pattern1" -e "pattern2" *.gz
或:
或:
其中,pattern.file
是一个包含所有模式的文件,模式之间用新行字符分隔
-z
/-搜索压缩文件中的zip
搜索(例如gz
、bz2
、xz
和lzma
)
grep
/zgrep
/zegrep
使用zgrep
或zegrep
在压缩文件中使用其未压缩内容(GNU/Linux和BSD/Unix)查找模式
在Unix上,还可以将grep
(即)与-Z
一起使用,包括在macOS上使用-Z
几个例子:
zgrep -E -r "pattern1|pattern2|pattern3" .
zegrep "pattern1|pattern2|pattern3" **/*.gz
grep -z -e "pattern1" -e "pattern2" *.gz # BSD/Unix only.
注意:**
递归检查文件,否则使用-r
-R
/-R
/--recursive
递归搜索列出的子目录
-E
/--扩展regexp
将模式解释为扩展正则表达式(如egrep
)
-Z
(),-Z
/--decompress
()强制grep充当zgrep
只是没有想到。如果我得到它,我会编写一个类似的命令。在没有zgrep的系统上工作得很好,我没有root权限。非常感谢。在某些系统上,您可能必须使用gcat而不是gzcat。
rg -z -e "pattern1" -e "pattern2" *.gz
rg -z "pattern1|pattern2" .
rg -zf pattern.file .
zgrep -E -r "pattern1|pattern2|pattern3" .
zegrep "pattern1|pattern2|pattern3" **/*.gz
grep -z -e "pattern1" -e "pattern2" *.gz # BSD/Unix only.