
El problema es escribir un script que tome un archivo como argumento e imprima todas las líneas que contengan -al menos- todas las vocales, -sin importar el orden-, pero con [no hay dos vocales consecutivas iguales].
por ejemplo, aeaiou está permitido, pero no aaeiou debido a la 'aa'
El siguiente script es casi lo que necesito, pero no verifica la consecutivaidad.
egrep -i '.[a]+' ${1} | egrep -i '[e]+' | egrep -i '[i]+' | egrep -i '[o]+'| egrep -i '[u]+'
Nota: Se me permite usar grep y construcciones de bucle, pero no comandos oscuros/de alto nivel.
resuelto;
egrep -vi '[a][a]' ${1} | egrep -vi '[e][e]' | egrep -vi '[i][i]' | egrep -vi '[o][o]' | egrep -vi '[i][i]' | egrep -i '[a]+' | egrep -i '[e]+' | egrep -i '[i]+' | egrep -i '[o]+'| egrep -i '[u]+'
Respuesta1
Siempre que quieras excluir toda la línea si hay vocales dobles, esto debería funcionar:
grep -i a file | \
grep -i e | \
grep -i i | \
grep -i o | \
grep -i u | \
grep -v -i '\([aeiou]\)\1'
Respuesta2
En lugar de invocar grep
varias veces, también puede utilizar una única invocación de sed
, ya sea
sed -rn '/(aa|ee|ii|oo|uu)/d; /a/{/e/{/i/{/o/{/u/p}}}}'
o
sed -rn '/([aeiou])\1/d; /a/{/e/{/i/{/o/{/u/p}}}}'
si prefiere utilizar referencias anteriores.
Respuesta3
Usando su pregunta (ligeramente modificada, con un salto de línea antes de but not aaeiou because of the 'aa'
) como entrada:
$ cat hehe.txt
The problem is to write a script that takes a file as argument
and prints all the lines that contain -at least- all the vowels ,
-regardless of ordering-, but with [no two same consecutive vowels].
e.g aeaiou is allowed,
but not aaeiou because of the 'aa'
The script below is almost what I need, but it does not check for
consecutiveness.
$ awk 'BEGIN { IGNORECASE=1 };
! /aa|ee|ii|oo|uu/ && ( /a/ && /e/ && /i/ && /o/ && /u/ )' hehe.txt
The problem is to write a script that takes a file as argument
-regardless of ordering-, but with [no two same consecutive vowels].
e.g aeaiou is allowed,
El awk
script habilita el modo que no distingue entre mayúsculas y minúsculas, elimina líneas que contienen vocales dobles y luego imprime líneas que contienen al menos una de cada vocal.