用红色字打印第二个元音

如何在红色或蓝色的单词中打印第二个元音。 假设我执行名为“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]匹配所需的第二个元音

在此处输入图像描述