egrep 표현식 이해

egrep 표현식 이해

나는 다음과 같은 egrep 표현을 우연히 발견했습니다.

egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' /usr/share/dict/words

이 페이지에서:http://matt.might.net/articles/sculpting-text

이 표현식은 5~7개의 모음이 포함된 단어를 찾아야 합니다.

줄 시작 부분부터 첫 번째 ^의 의미를 이해합니다. 두 번째 ^는 aieou 뒤에 오는 모든 문자 수와 5~7번 사이의 aeiou 중 하나를 무효화합니다. 하지만 첫 번째 표현과 마지막 표현이 어떤 것인지 이해가 되지 않습니다.[^aieou]

답변1

[^aieou]*0개 이상의 자음( ), 5~7개의 모음( ([aieou]){5,7}), 0개 이상의 자음( ) 을 찾습니다 [^aieou]*. 전체 정규식은 줄의 시작( ^)과 끝( )에 고정됩니다.$

$ egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' \
        /usr/share/dict/words | head -10
abacinate
abacination
abacterial
abaisance
abalation
abalienate
abalienated
abalienating
abalienation
abandonable

세부 사항

그래서 첫 번째 단어 와 일치할 때 abacinate첫 글자 a 왼쪽에 자음이 0개 있으므로 그 부분을 일치시킵니다.

자음이 0개 이상인 모음이 왼쪽 및/또는 오른쪽에 추가로 발견되므로 이러한 경우도 일치시킵니다. 5에서 7을 찾으면 일치하는 것입니다.

관련 정보