grep -E 정규식 구문이 변경되었습니까?

grep -E 정규식 구문이 변경되었습니까?

내가 읽은 많은 문서에 따르면 다음 명령은 x가 연속으로 3번 이상, 4번 이하로 나타나는 줄과 일치해야 합니다.

grep -E {x}\{3,4}

예를 들어http://www.delorie.com/gnu/docs/grep/grep_7.html또는http://www.google.com/support/enterprise/static/postini/docs/admin/en/admin_ee_cu/cm_regex.html

아마도 이는 일치하는 항목이 반환되지 않아야 함을 의미합니다.

xxxxx
xxxxxx

하지만 테스트 파일을 만들고 이 명령을 실행했습니다.

grep -o -E [x]\{3,4} testfile

다음 출력을 반환했습니다.

xxxx
xxxx

두 줄이 일치합니다. 어떻게 되어가나요? 이것이 Solaris에서 bash 쉘의 모습입니다.

답변1

먼저, 어떤 특수 문자를 사용하여 쉘이 무엇을 하는지 기억하는 것이 고통스럽기 때문에 항상 grep 표현식을 인용해야 합니다.

grep -o -E '[x]{3,4}' testfile

둘째, 최소한의 일치 항목이 발견됩니다. 매우 간단하므로 더 긴 실행에 걸쳐 3~4개의 실행을 일치시키는 grep것이 좋을 것입니다 . 이런 일이 발생하지 않도록 하려면 일종의 경계 조건이 필요합니다.xx아니요장거리 달리기의 하위 집합을 일치시킵니다. PCRE를 지원 하는 사용자는 grep너비가 0인 둘러보기를 사용하여 이를 달성할 수 있습니다.

(echo xxx; echo xxxxxx) | grep -P '(?<!x)xxx(?!x)'

관련 정보