sedで置換結果にANSI Escapeを使って色付けをする

時折、sedで置換する際にエスケープシーケンスを使って文字の色を指定したい場合というのがあると思うけど、それについて今まで把握してなかったので備忘で残しておく。 sedでエスケープシーケンスを表現する場合、残念ながらechoのときのように\eとかで表現しても置換できない。じゃあどうすればいいのかというと、エスケープを文字コード(\x1b)で記述してやることで表現できる。

sed 's/<Before>/\x1b[32m<Replace>\x1b[0m/g;'

実際に動かしてみるとこんな感じ。 ちゃんと色が付与されているのがわかる。

値を変えないのであれば grepでGREP_COLORSを指定してやればいい のだけど、置換処理が必要なのであればsedでやっちゃったほうがいいだろう。