如何突出显示文件中每个单词的第二个元音?

如何突出显示文件中每个单词的第二个元音?

我正在尝试用红色突出显示单词中的每个第二个元音。我做错了什么?

cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'

附言:抱歉,我的表述不清楚。

我希望每个单词的第二个元音用红色突出显示。

答案1

  1. 命令替换不在单引号中执行,您必须使用双引号代替。
  2. \e[1;30m不是变量,因此您不能执行${\e[1;30m}

尝试:

sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt

这里我把单引号关闭然后使用双引号,然后重新打开单引号。

答案2

您误解了seds///2构造。它不会对每个第二个单词执行此操作,它只会对每一行执行第二次匹配。为了突出显示每个单词的第二个元音,您需要先识别单词。一种简单的方法是将空格转换为换行符,运行您的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' ' ' )

示例输出:

在此处输入图片描述

相关内容