正規表現を使用して 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これは、シェルパターンに一致する各ファイルに対して1つずつ並列インスタンスを実行しますmy.log*.gz。シェルはコマンドを実行する前にパターンを拡張します。したがって、別の通話は必要ありませんfind

気になる方はzgrepオプションとしてご利用ください-Hどのファイルマッチ。

関連情報