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