일치 후 grep -E 및 바이트를 사용하는 방법

일치 후 grep -E 및 바이트를 사용하는 방법

나는 다음과 같이 grep하려고합니다 :

grep -E '(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3)' xst.sql

하지만 일치 전후에 일부 바이트(행 아님)가 필요합니다.

-E와 -P를 함께 사용하면 다음과 같은 결과를 얻습니다.

grep: conflicting matchers specified

비슷한 기능을 원해요

grep -o -P '.{0,10}UNIQ_23A0E66922726E9.{0,10}' xst.sql 

그러나 모든 문자열에 대해 - 예에서는 2가 있지만 실제로는 1000+를 grep합니다.

답변1

-EGNU grep에게 확장 정규식(ERE)을 사용하라고 지시하고, -PERE 기능의 상위 집합인 Perl 호환 정규식(PCRE)을 사용하라고 지시하십시오. 이는 정규식 언어의 두 가지 변형이므로 옵션이 서로 충돌합니다.

그러나 귀하가 표시한 내용에는 PCRE가 필요하지 않으므로 다음을 사용할 수 있는 것 같습니다.

grep -o -E '.{0,10}(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3).{0,10}' xst.sql

이는 유효한 정규식이기도 하며 PCRE에서도 동일한 의미를 갖습니다. ERE 엔진과 PCRE 엔진 사이에 성능 차이가 있는지 잘 모르겠습니다.

관련 정보