내가 읽은 많은 문서에 따르면 다음 명령은 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
것이 좋을 것입니다 . 이런 일이 발생하지 않도록 하려면 일종의 경계 조건이 필요합니다.x
x
아니요장거리 달리기의 하위 집합을 일치시킵니다. PCRE를 지원 하는 사용자는 grep
너비가 0인 둘러보기를 사용하여 이를 달성할 수 있습니다.
(echo xxx; echo xxxxxx) | grep -P '(?<!x)xxx(?!x)'