Я пытаюсь выделить каждую вторую гласную в слове красным цветом. Что я делаю не так?
cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'
P.S. Извините, если неясно выразился.
Я бы хотел, чтобы вторая гласная каждого слова была выделена красным.
решение1
- Подстановка команд в одинарных кавычках не выполняется, вместо этого придется использовать двойные кавычки.
\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' ' ' )