Estou tentando destacar cada segunda vogal de uma palavra com a cor vermelha. O que estou fazendo de errado?
cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'
Sal. Desculpe por não deixar claro.
Gostaria que a segunda vogal de cada palavra fosse destacada em vermelho.
Responder1
- A substituição de comandos não é realizada entre aspas simples; em vez disso, você terá que usar aspas duplas.
\e[1;30m
não é uma variável, então você não pode fazer isso${\e[1;30m}
.
Tentar:
sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt
Aqui, fecho a aspa simples e, em seguida, uso aspas duplas e, em seguida, reabro a aspa simples.
Responder2
Você entendeu mal a construção sed
de s///2
. Isso não fará cada segunda palavra, apenas fará a segunda correspondência em cada linha. Para destacar a segunda vogal de cada palavra, você precisa primeiro identificar as palavras. Uma maneira fácil e fácil é converter espaços em novas linhas, executar sed
e converter novamente:
tr ' ' $'\n' < room.txt |
sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' |
tr $'\n' ' '
Isso, no entanto, retornará uma string sem nova linha à direita. Para adicionar isso, apenas echo
a coisa toda:
echo $(tr ' ' $'\n' < room.txt |
sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | tr $'\n' ' ' )