Как выделить вторую гласную в каждом слове в файле?

Как выделить вторую гласную в каждом слове в файле?

Я пытаюсь выделить каждую вторую гласную в слове красным цветом. Что я делаю не так?

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

P.S. Извините, если неясно выразился.

Я бы хотел, чтобы вторая гласная каждого слова была выделена красным.

решение1

  1. Подстановка команд в одинарных кавычках не выполняется, вместо этого придется использовать двойные кавычки.
  2. \e[1;30mне является переменной, поэтому вы не можете сделать ${\e[1;30m}.

Пытаться:

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

Здесь я закрываю одинарную кавычку, затем использую двойные кавычки, а затем снова открываю одинарную кавычку.

решение2

Вы неправильно понимаете sedконструкцию s///2. Это не сделает каждое второе слово, это сделает только второе совпадение в каждой строке. Чтобы выделить вторую гласную каждого слова, вам нужно сначала идентифицировать слова. Самый простой способ — преобразовать пробелы в новые строки, запустить your sedи затем преобразовать обратно:

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

Однако это вернет строку без завершающего символа новой строки. Чтобы добавить это, просто echoвсе:

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

Пример вывода:

введите описание изображения здесь

Связанный контент