用红色字打印第二个元音
如何在红色或蓝色的单词中打印第二个元音。 假设我执行名为“script1”的脚本,该脚本读取文本文件。 我的脚本应该能够以红色或蓝色打印每个单词中的第二个元音。 如果只有一个元音,则以彩色打印。 如果没有元音,则用彩色字打印第一个字母!
#!/bin/bash filename="./file" # change this filename according to your requirements red=$'\e[31m' reset=$'\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"
缺点:您在输出中丢失了连续的空格和制表符。
更多信息: help
或man
或info
如何使用grep为匹配颜色以及一些PCRE-fu? 就像是
grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]'
哪里
-
\b
匹配单词边界; 然后 -
[^aeiou\s]*
匹配零个或多个非元音,非空格字符 -
[aeiou]
匹配第一个元音 -
[^aeiou\s]*
匹配另外零个或多个非元音,非空格字符 -
\K
从最终匹配的表达式中排除所有上述内容(实际上, 可变长度的lookbehind断言 ) - 最后,
[aeiou]
匹配所需的第二个元音