以下のようにHello.txtファイルを準備しました。
1253125213
213532135
23513125215
次に、「2」青と「2」赤を除くすべての行に色を付けたいと思います。
最初は文章を書いた。
BLUE='\033[0;34m'
RED='\033[0;31m'
そしてそうしようと努力しましたがsed 's/2/${RED}2${BLUE}/'
、効果がありませんでした。
どうすればいいですか?
ベストアンサー1
まず、補間するときに二重引用符が必要です。
$ sed "s/2/${RED}2${BLUE}/" Hello.txt
1233[0;31m2233[0;34m53125213
233[0;31m2233[0;34m13532135
233[0;31m2233[0;34m3513125215
ただし、ASCIIエスケープシーケンスにはsedに影響を与える文字が含まれているため、エスケープ文字シーケンスを実際の制御文字に変換する必要があります。これはサブシェルを使用して行うことができます。最後を参照してください/g
。これは、1行に複数の置換が許可されることを意味します。
$ sed "s/2/`echo $RED`2`echo $BLUE`/g" Hello.txt
今、これはまだ正しいではないようです。実際にやるべきことは、各行が青で始まるように設定し、次に各2
代替項目が赤で始まり、青で終わるように設定することです。帽子文字は^
行の始まりを表す正規表現です。また、パイプの使用と再配置に注意してくださいcat
。
$ cat Hello.txt | sed "s/^/`echo $BLUE`/" | sed "s/2/`echo $RED`2`echo $BLUE`/g"
サブシェル変換を変数割り当てに移動して、より明確にすることもできます。存在しない変数を使用しないように文字と区別するRED
ために中括弧が必要です。2
RED2
$ BLUE=`echo '\033[0;34m'`
$ RED=`echo '\033[0;31m'`
$ cat Hello.txt | sed "s/^/$BLUE/" | sed "s/2/${RED}2${BLUE}/g"
源泉:http://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/