当我运行这个时:
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
哪个文件火柴。