一致と一致しない項目を印刷するにはどうすればよいですか?

一致と一致しない項目を印刷するにはどうすればよいですか?

基本的に私がしたいのは、入力がフィルタと一致するときに出力を変更することですsed。これまでの問題は、awk変更された行のみを出力することです。

簡単な例として、test.txtに次のように入力します。

orange beet pear cowmilk
apple pear berry cowmilk
orange melon cherry cowmilk

コードを使用する場合:

awk /orange/'{gsub(/cow/,"cow~"); print}' test.txt

私は得る:

orange beet pear cow~milk
orange melon cherry cow~milk

私が望むなら:

orange beet pear cow~milk
apple pear berry cowmilk
orange melon cherry cow~milk

awkでできることはわかりましたが||、上記のgsubと一致させる方法を見つけることができませんでした。

ボーナス付加価値のために私が本当にしたいのは、代わりに色を追加することです~。しかし、これは完全に中断されます。

awk /orange/'{gsub(/cow/,"cow'\e[1;34m'"); print}' test.txt

\行の終わりではないというエラーが発生します。

ベストアンサー1

色の場合は、実際のESC文字(エスケープ形式ではない\e)を指定する必要があります。値は16進数\x1Bまたは8進数です\033。次のスクリプトは、-すべての入力行をダッシュ​​として表示して印刷します。

awk '/orange/{gsub(/cowmilk/,"cow\x1B[1;34m-\x1B[0mmilk")} {print}' "$file"

sed '/orange/{s/cowmilk/cow\x1B[1;34m-\x1B[0mmilk/g}' "$file"

おすすめ記事