정규식을 사용하여 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이것은 쉘 패턴과 일치하는 각 파일에 대해 하나씩 병렬 인스턴스를 실행합니다 my.log*.gz. 쉘은 명령을 실행하기 전에 패턴을 확장합니다. 따라서 별도의 통화가 필요하지 않습니다 find.

궁금하신 분들은 zgrep옵션으로 이용해보세요-H어떤 파일성냥.

관련 정보