grep 및 정규식 명확화

grep 및 정규식 명확화

길이가 10자이고 세 개의 연속 모음으로 구성된 하위 문자열을 포함하는 단어 집합입니다. 나는 지금까지 이러한 명령을 시도했습니다.

grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
grep -E '^.{10}$&a*.e*.i*.o*.u*' words2.txt

OCR을 통해 데이터 입력 및 추출이 스크린샷:

unpernicious
unperspicuous
unpervious
unpious
unpiteous
unpiteously
unpiteousness
unplebeian
unplenteous
unportmanteaued
unportuous
unprecarious
unprecious
unprecocious
unpredacious
unpresumptuous
unpresumptuously
unpretentious
unpretentiously
unpretentiousness
unpromiscuous
unpropitious
unpropitiously
unpropitiousness
unpugnacious
unpunctilious
unquailed
unquailing
unquailingly
unqueen
unqueened
unqueening
unqueenlike
unqueenly
unquiescence
unquiescent
unquiescently
unquiet
unquietable
unquieted
unquieting
unquietly
unquietness
unquietude
unrapacious
unrebellious
unreligious
unreligiously
unreligiousness
unrighteous
unrighteously
unrighteousness
unsacrilegious
Unsagacious
unsalubrious
unsanctimonious
unsanctimoniously
unsanctimoniousness
unsanguineous
unsanguineously
unseditious
unseeable
unseeing

답변1

귀하의 질문(IMHO)은 으로 가장 잘 해결되지만 awk귀하의 명령에 한 가지 문제를 지적하고 싶습니다.

grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt 

word2.txt두 번의 호출로 파일의 내용을 필터링하려면 grep다음과 같아야 합니다.

grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'

두 번째 모드 는 다음과 같아야 grep합니다 .[auoie]{3}

grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'

첫 번째 항목에 대한 입력은 grep파일입니다. 두 번째의 입력은 grep첫 번째의 출력입니다 grep.아니요당신의 파일.

POSIX 사용 awk(최신 버전의 GNU와 유사 awk):

$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude

mawk, BSD awk및 과거 POSIX 구현은 정규식을 awk지원하지 않았습니다 .{n}스테판 차젤라스는 다음과 같이 지적합니다..

답변2

10자를 정확하게 추측했지만 연속된 모음 3개를 찾으려면 다음 그룹을 찾으세요 [AEIOU].

egrep '^.{10}$' | egrep -i '[AEIOU]{3}'

공백을 거부하려면 다음 명령을 사용하십시오.

egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'

답변3

1개의 단어/라인을 가정하면 다음과 같이 할 수 있습니다.

sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt

답변4

내장형 grepPCRE 지원:

grep -iPx '(?=.*[aeiou]{3}.*).{10}'

또는:

grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'

한 줄에 하나가 아닌 경우 이러한 단어를 검색합니다( 구현에서 해당 단어가 있는 전체 줄을 인쇄하는 대신 일치하는 단어만 인쇄하도록 지원하는 -o경우 추가). grep거기단어임의의 시퀀스를 나타냅니다.단어문자(문자(라틴어 스크립트에서는 발음 구별 부호만 제외, (*UCP)모든 스크립트의 문자에 a를 추가하지만 é또는 같은 모음은 제외 α), 숫자 및 밑줄).

관련 정보