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}스테판 차젤라스(Stéphane Chazelas)가 지적한 것.

답변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)같은 모음은 포함하지 않음 ), 숫자 및 밑줄).éα

관련 정보