
Conjunto de palabras que tienen 10 caracteres y que contienen una subcadena de tres vocales consecutivas. Hasta ahora probé estos comandos.
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
grep -E '^.{10}$&a*.e*.i*.o*.u*' words2.txt
Datos de entrada, extraídos mediante OCR deesta captura de pantalla:
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
Respuesta1
Su problema (en mi humilde opinión) se resuelve mejor con awk
, pero solo señalaré un problema con su comando
grep -E '^.{10}$'| grep 'a*.e*.i*.o*.u*' words2.txt
Para filtrar el contenido del archivo word2.txt
a través de ambas grep
invocaciones, esto debería verse así
grep -E '^.{10}$' words2.txt | grep 'a*.e*.i*.o*.u*'
El segundo grep
patrón debería ser [auoie]{3}
, lo que nos lleva a
grep -E '^.{10}$' words2.txt | grep -E '[aouie]{3}'
La entrada al primero grep
es su archivo. La entrada del segundo grep
es la salida del primero grep
,notu archivo.
Usando un POSIX awk
(como versiones recientes de GNU awk
):
$ awk 'length == 10 && /[aouei]{3}/' words2.txt
unpervious
unplebeian
unportuous
unprecious
unquailing
unqueening
unquieting
unquietude
mawk
, BSD awk
y las implementaciones históricas anteriores a POSIX de awk
no admiten {n}
expresiones regulares comoseñalado por Stéphane Chazelas.
Respuesta2
Tenías bien los 10 caracteres, pero para encontrar 3 vocales seguidas busca un grupo [AEIOU]
:
egrep '^.{10}$' | egrep -i '[AEIOU]{3}'
Para rechazar el espacio en blanco use esto:
egrep '^[^ \t]{10}$' | egrep -i '[AEIOu]{3}'
Respuesta3
Suponiendo 1 palabra/línea, puedes hacer esto:
sed -nE '/^.{10}$/!d;/[aAeEiIoOuU]{3}/p' words.txt
Respuesta4
Con grep
soporte PCRE integrado:
grep -iPx '(?=.*[aeiou]{3}.*).{10}'
O:
grep -wiP '(?=\w*[aeiou]{3}\w*)\w{10}'
para buscar esas palabras cuando no sean una por línea (agregue -o
si su grep
implementación lo admite para imprimir solo las palabras coincidentes en lugar de toda la línea en la que se encuentran). Allápalabrasignifica cualquier secuencia depalabracaracteres (letras (en la escritura latina, sin signos diacríticos solamente, agregue una (*UCP)
para las letras en cualquier escritura, aunque eso aún no cubrirá vocales como é
o α
), dígitos y guiones bajos).