我正在尝试用红色突出显示单词中的每个第二个元音。我做错了什么?
cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'
附言:抱歉,我的表述不清楚。
我希望每个单词的第二个元音用红色突出显示。
答案1
- 命令替换不在单引号中执行,您必须使用双引号代替。
\e[1;30m
不是变量,因此您不能执行${\e[1;30m}
。
尝试:
sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt
这里我把单引号关闭然后使用双引号,然后重新打开单引号。
答案2
您误解了sed
的s///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' ' ' )