ファイル内のすべての単語の 2 番目の母音を強調表示するにはどうすればよいでしょうか?

ファイル内のすべての単語の 2 番目の母音を強調表示するにはどうすればよいでしょうか?

単語の 2 番目の母音を赤色で強調表示しようとしています。何が間違っているのでしょうか?

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

P.S. わかりにくくてすみません。

各単語の 2 番目の母音を赤で強調表示します。

答え1

  1. コマンドの置換は一重引用符では実行されません。代わりに二重引用符を使用する必要があります。
  2. \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' ' ' )

出力例:

ここに画像の説明を入力してください

関連情報