여러 AND 패턴으로 zgrep을 실행하는 방법은 무엇입니까?

여러 AND 패턴으로 zgrep을 실행하는 방법은 무엇입니까?

grep나는 이것을 사용하여 이 작업을 수행하는 방법을 알고 있습니다.지그레프

grep -E 'Pattern1.*Patter2' fileName

나는 그것을 사용하고 있다지그레프.json.gz파일 내의 패턴을 일치시킵니다 . 파일이 너무 크기 때문에 zgreppattern1을
하고 싶습니다.BOTH그리고패턴2, 순서는 중요하지 않습니다.

가능합니까?

답변1

grep논리 AND 연산자가 없습니다. 정규식 OR 연산자를 사용해도 동일한 결과를 얻을 수 있습니다.

zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

답변2

패턴 1과 패턴 2가 모두 존재하지만 순서에 상관없이 행을 찾으려는 것 같습니다(그러나 실제로는 명확하지 않습니다).

간단한 해결책은 입니다 zcat FileName | grep -E pattern1 | grep -E pattern2. 그러나 이는 압축이 풀린 전체 파일이 첫 번째 파일을 통해 파이프된다는 의미입니다.

이 문제를 처리하고 zgrep파일에서 발생 횟수가 제한되어 있으면 제대로 작동합니다. (가장 희귀한 경우 교체해야 할 수도 있습니다.)pattern1zgrep -E pattern1 | grep -E pattern2pattern2

솔루션과 함께 @mashuptwice가 제공한 답변은 효과가 있지만 관련 난이도에 따라 다르며 시작하기 어려울 수 있습니다 pattern1.pattern2

문제를 해결하지 못했습니다. 두 문자열을 어떤 순서로든(그러나 메모리에 제한되지 않음) 검색하고 싶었고 perl -ale 'print if (/pattern1/ && /pattern2/)'(대부분의 언어에서는 비슷한 것을 허용하지만 저는 Perl을 좋아합니다) 좋은 해결책이 될 수 있었습니다. (귀하의 경우에는 스크립트에서 압축 해제를 처리해야 합니다)

관련 정보