読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

"terraform plan" の変更行に色付けする tpdiff を更新しました

https://github.com/gongo/tpdiff

← before | after →

f:id:gongoZ:20161210065817p:plain

経緯

このあたりで作ったやつを会社の同僚に使ってもらっていたところ:

_人人人人人人人人人人人人人人人人人人人人人人人人_
> 全部赤色だと全部削除されるっぽく見えて怖い!!! <
 ̄YYYYYYYYYYYYYYYYYYYYYYYY ̄

というフィードバックをいただき、それもそうだなということで「追加」「削除」「変更」それぞれで色変えるようにしました。

sed 補足

前回の sed、1ヶ月後に見直した時わけわからんかったので、今回も記録しておく

# \033 は省略しています

/".*" => ".*"$/!b
/^.*: *"" => ".\{1,\}"$/  s/.*/[32m&[m/
t
/^.*: *".\{1,\}" => ""$/  s/.*/[31m&[m/
t
/^.*: *"\(.*\)" => "\1"$/!s/.*/[34m&[m/
  1. "foo" => "bar" という形式の行 じゃない場合 はこの時点で終了
    • アドレス付けない b は「スクリプトの最後までジャンプする」を意味する
  2. "" => ".+" という形式の行であれば 追加 用の色をつける
  3. t コマンドにより、直近の /s が成功していればこの時点で終了
  4. ".+" => "" という形式の行であれば 削除 用の色をつける
  5. t コマンドにより、直近の /s が成功していればこの時点で終了
  6. "foo" => "bar" 、つまり左と右の値(文字列)が 同じでない場合変更 用の色をつける

多分こんな感じです。都度 t で抜けているのは、最後の「変更」に対する正規表現が 「追加」や「削除」にもマッチしてしまい、2重で escape されてしまうからです。

まとめ

sed