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
파일에서 발생 횟수가 제한되어 있으면 제대로 작동합니다. (가장 희귀한 경우 교체해야 할 수도 있습니다.)pattern1
zgrep -E pattern1 | grep -E pattern2
pattern2
솔루션과 함께 @mashuptwice가 제공한 답변은 효과가 있지만 관련 난이도에 따라 다르며 시작하기 어려울 수 있습니다 pattern1
.pattern2
문제를 해결하지 못했습니다. 두 문자열을 어떤 순서로든(그러나 메모리에 제한되지 않음) 검색하고 싶었고 perl -ale 'print if (/pattern1/ && /pattern2/)'
(대부분의 언어에서는 비슷한 것을 허용하지만 저는 Perl을 좋아합니다) 좋은 해결책이 될 수 있었습니다. (귀하의 경우에는 스크립트에서 압축 해제를 처리해야 합니다)