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

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

나는 a, b, c 문자를 포함하는 길이 3의 하위 문자열로 시작하고 동일한 3개의 문자를 포함하는 또 다른 분리된 하위 문자열을 추가로 포함하는 단어 세트를 찾아 달라는 요청을 받았습니다.

전. abcacb acbbac

이에 대한 정규식을 찾는 데 도움을 주세요. 감사합니다

편집: abcbac - a,b,c는 처음 3글자로 있어야 하고, 그 다음 a,b,c는 이전 3글자의 순서를 바꿔야 합니다. 단 6개의 문자열입니다.

acbbca abcccba bacbca 등....

답변1

(여기서 솔루션은 grepPCRE 지원으로 구축될 때 GNU를 가정합니다(일반적으로 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개의 문자와 일치합니다.
  • .*사이의 어떤 것과도 일치합니다

관련 정보