Cygwin - 주어진 텍스트 파일에서 패턴을 찾는 egrep 명령

Cygwin - 주어진 텍스트 파일에서 패턴을 찾는 egrep 명령

길이가 3인 하위 문자열로 시작하고 문자 a, b, c를 포함하고 동일한 3개의 문자를 포함하는 또 다른 분리된 하위 문자열도 포함하는 단어 집합을 찾으라는 요청을 받습니다.

전임자. abcacb abcbac

정규식을 찾는 데 도움을 주세요. 감사해요

편집: abcbac - a, b, c는 처음 3글자여야 하며, 그런 다음 a, b, c는 처음 3글자의 순서를 변경해야 합니다. 끈은 6개뿐입니다.

acbbca abcccba bacbca 등...

답변1

(여기서의 솔루션은 grepGNU가 PCRE 지원으로 구축되었다고 가정합니다(보통 cygwin의 경우).)

귀하의 요청의 전반부는 다음을 의미합니다.

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*(?1)\w*'

아니면:

grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*\1\w*'

후반부는 전반부와 모순되는 것 같습니다.

grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'

찾을 것이다성격(단어이 경우 문자 시퀀스로 정의됨), [a-zA-Z0-9_]및(각 문자당 하나)로 구성된 3자 시퀀스로 시작하지만 그 뒤에는 또 다른 시퀀스(첫 번째 그룹과 동일한 정규 표현식 참조)가 옵니다. 단, 첫 번째 캡처 그룹과 다른 경우(첫 번째 캡처 그룹과 일치하는 문자열 참조)abc(?1)(...)\1(...)(?!...)부정적인 전망운영자).

$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
    grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
abcbca
abcacb

답변2

이렇게 하면 트릭을 수행할 수 있습니다.

grep -Ew '[a-c]{3}.*[a-c]{3}'
  • -E정규식 일치
  • -w단어만 일치
  • [a-c]{3}a-c세트의 문자 3개와 정확히 일치합니다.
  • .*사이의 어떤 것과도 일치합니다

관련 정보