我試圖將單字中的每個第二個元音突出顯示為紅色。我究竟做錯了什麼?
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
構造。這不會執行每個第二個單詞,它只會執行每行的第二個匹配。 o 突出顯示每個單字的第二個元音,您需要先識別單字。一個簡單的方法是將空格轉換為換行符,運行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' ' ' )