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
- La sustitución de comandos no se realiza entre comillas simples; en su lugar, tendrás que utilizar comillas dobles.
\e[1;30m
no 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 sed
la 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 sed
y 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 echo
todo:
echo $(tr ' ' $'\n' < room.txt |
sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | tr $'\n' ' ' )