无法使用正则表达式并行运行 zgrep

无法使用正则表达式并行运行 zgrep

当我运行这个时:

find . -name "my.log*.gz" -print | \
parallel zgrep -e "\(text1\|text2\).*Exception"

要查找/(text1|text2).*Exception/文件夹中所有文件中匹配的所有行,我收到以下错误消息:

zsh:1: no matches found: (text1|text2).*Exception

从错误消息来看,我认为(text1|text2).*Exception正在被视为文件名。我在这里做错了什么?

答案1

用于-E扩展正则表达式

find . -name "my.log*.gz" -print | \
parallel zgrep -E "\(text1\|text2\).*Exception"

答案2

您需要更多引用:

find . -name "*.gz" -print |
  parallel -q zgrep -e "\(text1\|text2\).*Exception"

使用-vv--dr查看真正正在运行的内容。

答案3

如果您使用包parallel中的命令moreutils,您的命令可以像这样简化:

parallel zgrep -e "\(text1\|text2\).*Exception" -- my.log*.gz

这将运行 的并行实例zgrep,每个与 shell 模式 匹配的文件一个实例my.log*.gz。请注意,在执行命令之前,shell 会扩展模式。因此,无需单独调用find

如果您想知道,请zgrep与选项一起使用-H哪个文件火柴。

相关内容