Como destacar a segunda vogal de cada palavra em um arquivo?

0

Estou tentando destacar cada segunda vogal em uma palavra para a cor vermelha. O que estou fazendo errado?

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

Desculpe por deixar claro.

Eu gostaria da segunda vogal de cada palavra destacada em vermelho.

    
por Nebelz Cheez 26.03.2015 / 17:50

2 respostas

1

  1. A substituição de comandos não é executada em aspas simples, em vez disso, você terá que usar aspas duplas.
  2. \e[1;30m não é uma variável, portanto você não pode fazer ${\e[1;30m} .

Tente:

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, reabrimo a aspas simples.

    
por muru 26.03.2015 / 18:02
1

Você entendeu mal a construção sed ' s///2 '. Isso não fará cada segunda palavra, só fará a segunda partida em todas as linhas. Para destacar a segunda vogal de cada palavra, você precisa identificar as palavras primeiro. Uma maneira fácil e simples é converter espaços em novas linhas, executar seu sed e, em seguida, 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 nenhuma nova linha. 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' ' ' )

Exemplo de saída:

    
por terdon 27.03.2015 / 12:08