grep을 사용하여 파일에서 5개의 모음을 연속으로 표시하는 방법은 무엇입니까?

grep을 사용하여 파일에서 5개의 모음을 연속으로 표시하는 방법은 무엇입니까?

나는 이것을 시도했지만 작동하지 않습니다. 문자 목록만 반환합니다.

grep  ?*\[aeiouAEIOU]\{5\}?* words

답변1

5개의 모음이 연속적으로 포함된 행을 표시하려고 한다고 가정합니다.

grep  "[aeiouAEIOU]\{5\}" words

\당신은 에있을 필요가 없습니다 . 나는 s가 무엇인지 [모릅니다 . 그리고 쉘이 s와 s를 ?*해석하는 것을 방지하려면 이를 인용해야 합니다 .*?

답변2

grep -o -E '[aeiouAEIOU]{5}' words

문제는 구문의 별표가 쉘에 의해 확장된 파일 이름이고 grep이 이를 볼 수 없으며, 여는 괄호는 이스케이프했지만 일치하는 닫는 괄호는 이스케이프하지 않았다는 것입니다. 그런데 더 간단한 구문이 있는데 왜 복잡한 구문을 사용합니까?

답변3

보여주다오직모음이 5개이면 스위치를 사용하세요 -o.

이 스위치를 사용 -E하면 중괄호를 직접(이스케이프하지 않음) 사용할 수 있습니다.

대소문자를 구분하지 않으려면 -i스위치를 사용할 수 있습니다.

예를 들어

echo "AKAAJEJEaeiooXXX" | grep -Eio '[aeiou]{5}'

Eaeio가 표시됩니다. -o 스위치가 없으면 모든 행이 출력됩니다.

5개의 모음(즉, 6개가 아님)이 포함된 행만 표시하려면 이 5개의 모음이 다른 모음과 닿지 않도록 지정해야 합니다. 그리고 줄의 시작이나 끝이 닿는 경계선 케이스를 관리합니다.

grep -Ei '([^aeiou]|^)[aeiou]{5}([^aeiou]|$)'

"일치하지 않는" 경계가 이제 발견된 패턴의 일부이므로 -o 스위치를 사용하는 것이 방지됩니다. 해당 스위치를 사용한 다음 5개의 모음이 포함된 두 번째 grep으로 파이프하여 출력을 더욱 구체화할 수 있습니다.

관련 정보