Как напечатать второй гласный в слове красным или синим цветом? Допустим, я выполняю свой скрипт с именем «script1», который читает текстовый файл. Мой сценарий должен быть способен напечатать второй гласный в каждом слове красным или синим цветом. Если есть только одна гласная, напечатайте это в цвете. Если гласных нет, напечатайте первую букву в слове в цвете!
#!/bin/bash
filename="./file" # change this filename according to your requirements
red= Недостаток: Вы освобождаете последовательные пробелы и вкладки в выводе.
<час> [еще 115] информация: help <command>
или man <command>
или info <command>
\e[31m'
reset=
Недостаток: Вы освобождаете последовательные пробелы и вкладки в выводе.
<час> [еще 115] информация: help <command>
или man <command>
или info <command>
\e[0m'
# read single line from $filename in $line (see last "done", last line of code)
while read -r line; do
# loop over every single word in $line
for word in $line; do
vc=$(tr -cd '[aeiouAEIOU]' <<< "$word") # remove all but vowels
case ${#vc} in # ${#vc}: number of vowels
0) # no vowel
sed -E "s/^./${red}&${reset}/" <<< "$word"
;;
1) # one vowel
sed -E "s/^([^aeiou]*)([aeiou]+)(.*)$/\1${red}\2${reset}\3/i" <<< "$word"
;;
*) # two or more vowels
sed -E "s/^([^aeiou]*[aeiou][^aeiou]*)([aeiou])(.*)$/\1${red}\2${reset}\3/i" <<< "$word"
;;
esac
done | tr "\n" " "
echo
done < "$filename"
Недостаток: Вы освобождаете последовательные пробелы и вкладки в выводе.
<час> [еще 115] информация:help <command>
или man <command>
или info <command>
Как насчет того, чтобы использовать grep для окраски соответствия, наряду с некоторым PCRE-fu? что-то как
grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]'
где
\b
соответствовать границе слова; затем[^aeiou\s]*
соответствуйте нулю или большему количеству негласного, непробелов[aeiou]
соответствовать первому гласному[^aeiou\s]*
соответствуйте другому нулю или большему количеству негласного, непробелов\K
исключить все вышеупомянутое из финала соответствовало выражению (эффективно, переменная длина lookbehind утверждение)[aeiou]
соответствовать желаемому второму гласному