grep 명령 및 역참조 사용

grep 명령 및 역참조 사용

아주 기초적인 질문인데 이해가 안가네요. 저는 Linux를 배우고 있는데 제가 받는 질문 중 하나는 다음과 같습니다.

*'sentimentalment'라는 단어에는 동일한 문자 3개가 세 번 등장합니다(예: 'ent'). "blablablam"이라는 단어에는 동일한 세 문자(예: "bla")가 세 번 반복되는 경우도 있습니다.

예를 들어 "sentimentalment" 및 "blayblapblam"과 같이 세 문자가 세 번 반복되지만 소문자 "d"로 시작하는 단어는 몇 개나 찾을 수 있습니까? /usr/share/dict/words를 가능한 단어 목록으로 사용하고 grep을 사용하여 답을 찾으세요. "d"는 세 문자 문자열을 감지할 때 고려되는 문자 중 하나가 아닙니다. *

지금까지는 동일한 세 글자가 두 번 나타나는 인스턴스를 반환할 수 있습니다.

grep -E '^d(...).*\1' /usr/share/dict/words > output

나에게는 "d"로 시작하는 단어를 찾은 다음 동일한 그룹(1)이 다시 나타나기 전에 0개 이상의 문자가 포함된 세 글자의 조합을 찾습니다.

나는 다음을 시도했습니다.

grep -E '^d(...).*\1.*\1' /usr/share/dict/words > output

내 이해가 정확하다면(분명히 그렇지 않음) 첫 번째 그룹이 반환되고 0개 이상의 문자가 반환된 다음 다시 첫 번째 그룹이 반환됩니다.

누군가 내가 잘못 가고 있는 곳을 지적할 수 있습니까? 도움을 주시면 감사하겠습니다.

답변1

이 세 글자를 수정한 것 같습니다 d. 어쩌면 다음과 같은 것이 필요할 수도 있습니다.

grep -E '^d.*(...).*\1' /usr/share/dict/words > output

그러면 3가지 패턴 검색이

grep -E '^d.*(...).*\1.*\1' /usr/share/dict/words > output

이식성의 이유로 확장 정규식과 역참조를 결합하는 것은 피해야 하므로 사용하는 것이 더 좋습니다.

grep '^d.*\(...\).*\1.*\1' /usr/share/dict/words > output

관련 정보