https://github.com/gongo/tpdiff
← before | after →
経緯
- terraform plan の実行結果で、属性値が変更になる行に色付けする sed - Thanks Driven Life
- TravisCI 上で「(GNU, BSD) sed & 各 shell」の組み合わせでテストする - Thanks Driven Life
このあたりで作ったやつを会社の同僚に使ってもらっていたところ:
_人人人人人人人人人人人人人人人人人人人人人人人人_
> 全部赤色だと全部削除されるっぽく見えて怖い!!! <
 ̄YYYYYYYYYYYYYYYYYYYYYYYY ̄
というフィードバックをいただき、それもそうだなということで「追加」「削除」「変更」それぞれで色変えるようにしました。
sed 補足
前回の sed、1ヶ月後に見直した時わけわからんかったので、今回も記録しておく
# \033 は省略しています /".*" => ".*"$/!b /^.*: *"" => ".\{1,\}"$/ s/.*/[32m&[m/ t /^.*: *".\{1,\}" => ""$/ s/.*/[31m&[m/ t /^.*: *"\(.*\)" => "\1"$/!s/.*/[34m&[m/
"foo" => "bar"
という形式の行 じゃない場合 はこの時点で終了- アドレス付けない
b
は「スクリプトの最後までジャンプする」を意味する
- アドレス付けない
"" => ".+"
という形式の行であれば 追加 用の色をつけるt
コマンドにより、直近の/s
が成功していればこの時点で終了".+" => ""
という形式の行であれば 削除 用の色をつけるt
コマンドにより、直近の/s
が成功していればこの時点で終了"foo" => "bar"
、つまり左と右の値(文字列)が 同じでない場合 は 変更 用の色をつける
多分こんな感じです。都度 t
で抜けているのは、最後の「変更」に対する正規表現が
「追加」や「削除」にもマッチしてしまい、2重で escape されてしまうからです。
まとめ
sed ぇ