単語の 2 番目の母音を赤色で強調表示しようとしています。何が間違っているのでしょうか?
cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'
P.S. わかりにくくてすみません。
各単語の 2 番目の母音を赤で強調表示します。
答え1
- コマンドの置換は一重引用符では実行されません。代わりに二重引用符を使用する必要があります。
\e[1;30m
は変数ではないので、 は実行できません${\e[1;30m}
。
試す:
sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt
ここでは、一重引用符を閉じて二重引用符を使用し、その後一重引用符を再度開きます。
答え2
sed
の構文を誤解していますs///2
。2 番目の単語ごとに実行されるわけではなく、各行の 2 番目の一致のみが実行されます。各単語の 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' ' ' )