¿Cómo resaltar la segunda vocal de cada palabra de un archivo?

¿Cómo resaltar la segunda vocal de cada palabra de un archivo?

Estoy tratando de resaltar cada segunda vocal de una palabra en color rojo. ¿Qué estoy haciendo mal?

cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'

PD. Perdón por no dejarlo claro.

Me gustaría que la segunda vocal de cada palabra esté resaltada en rojo.

Respuesta1

  1. La sustitución de comandos no se realiza entre comillas simples; en su lugar, tendrás que utilizar comillas dobles.
  2. \e[1;30mno es una variable, por lo que no puedes hacerlo ${\e[1;30m}.

Intentar:

sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt

Aquí, cierro las comillas simples, luego uso comillas dobles y luego vuelvo a abrir las comillas simples.

Respuesta2

No entiendes sedla construcción de s///2. Eso no funcionará cada dos palabras, solo hará la segunda coincidencia en cada línea. Para resaltar la segunda vocal de cada palabra, primero debes identificar las palabras. Una manera sencilla es convertir espacios en nuevas líneas, ejecutar sedy luego volver a convertir:

tr ' ' $'\n' < room.txt | 
    sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | 
        tr $'\n' ' ' 

Sin embargo, eso devolverá una cadena sin nueva línea al final. Para agregar eso, solo echotodo:

echo $(tr ' ' $'\n' < room.txt | 
      sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | tr $'\n' ' ' )

Salida de ejemplo:

ingrese la descripción de la imagen aquí

información relacionada