그래서 한 문자가 3번 반복되고 다른 문자가 3번 반복되는 6개의 문자 단어를 찾으려고 합니다. 예를 들어 aaabbb
또는 oookkk
.
노력하고있어:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
첫째, 정규 표현식이 올바른가요? 둘째, 왜 내가 그것을 얻나요 grep: Invalid back reference
?
답변1
아니요, 이는 잘못된 내용입니다. \1{3}
그것이 무엇인지는 모르겠지만 , 그것이 바로 문제의 원인입니다. 세 개의 반복 문자와 그 뒤에 다른 세 개의 반복 문자가 포함된 줄을 찾으려면 다음 명령을 사용할 수 있습니다.
grep -E '([a-z])\1{2}([a-z])\2{2}'
이는 \1
첫 번째를 가리킨다.캡처됩니다그룹. 대괄호를 사용하여 그룹을 캡처할 수 있습니다. 그런 다음 \1
첫 번째 그룹, \2
두 번째 그룹 등이 진행됩니다. 캡처된 그룹이 없기 때문에 grep
참조할 항목이 없기 때문에 잘못된 참조에 대해 불평합니다. 따라서 위 정규식에서 괄호는 이 두 그룹을 캡처합니다. 그런 다음 초기 일치도 계산되므로 원 {2}
하거나 원하지 않습니다 .{3}
단어를 일치시켜야 하는지 또는 단어 내에서도 일치할지 여부를 지정할 필요가 없습니다. 전체 단어를 일치시키고 이와 같은 것을 제외하려면 다음을 aaaabbb
대신 사용하십시오.
grep -wE '([a-z])\1{2}([a-z])\2{2}'
전체 줄 대신에 일치하는 줄 부분(단어)만 인쇄하려면 다음을 사용하세요(GNU grep에만 해당):
grep -owE '([a-z])\1{2}([a-z])\2{2}'