나는 다음과 같이 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
-E
GNU grep에게 확장 정규식(ERE)을 사용하라고 지시하고, -P
ERE 기능의 상위 집합인 Perl 호환 정규식(PCRE)을 사용하라고 지시하십시오. 이는 정규식 언어의 두 가지 변형이므로 옵션이 서로 충돌합니다.
그러나 귀하가 표시한 내용에는 PCRE가 필요하지 않으므로 다음을 사용할 수 있는 것 같습니다.
grep -o -E '.{0,10}(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3).{0,10}' xst.sql
이는 유효한 정규식이기도 하며 PCRE에서도 동일한 의미를 갖습니다. ERE 엔진과 PCRE 엔진 사이에 성능 차이가 있는지 잘 모르겠습니다.