Imprima líneas que contengan al menos todas las vocales en cualquier orden pero no consecutivas

Imprima líneas que contengan al menos todas las vocales en cualquier orden pero no consecutivas

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 grepvarias 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 awkscript 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.

información relacionada