diffコマンドメモ

  • すぐ忘れる、環境によってコマンドがあったりなかったりなのでメモ

  • 作業で使ったコマンドのメモ

  • 参考

stackoverflow.com

9 Best File Comparison and Difference (Diff) Tools for Linux

unix.stackexchange.com

www.computerhope.com

what you will learn

  • 環境準備
  • side-by-sideでdiff (human readable)
  • 色付けしてさらに視覚的に見やすくする
  • unified modeでdiff (not human readable)
  • diff outputの見方

環境準備

  • とりあえずcolordiffだけインストール
sudo apt-get install colordiff

side-by-sideでdiff

  • man見れば一瞬だが-yをつければOK
  • 人間が視覚的に見やすいoutput
diff -y ${file1 pacht}/file1 ${file2 pacht}/file2
  • さらに、パイプでlessすると便利
diff -y ${file1 pacht}/file1 ${file2 pacht}/file2 | less
  • さらに、--widthで幅を指定できる(デフォルトは130)
diff -y --width=${columns} ${file1 pacht}/file1 ${file2 pacht}/file2

色付けしてさらに視覚的に見やすくする

  • colordiffにパイプでつなげる
diff -y ${file1 pacht}/file1 ${file2 pacht}/file2 | colordiff
  • 注意点として、file1が表示しきれていないとcolordiffが効かない(デフォルトの130文字で足りない)。その場合は、--widthで割当て幅を広くしてあげる
  • これはcolordiffコマンド単体で使っても同じ
diff -y --width=${columns} ${file1 pacht}/file1 ${file2 pacht}/file2 | colordiff

unified modeでdiff

  • 今度はプログラム的に処理しやすい形
  • -cのcontext modeもあるけどよりシンプルで扱いやすいと思う
diff -u ${file1 pacht}/file1 ${file2 pacht}/file2
diff -u ${file1 pacht}/file1 ${file2 pacht}/file2 | grep -E "${keyword}"
  • unified modeのcharacterでgrep
#file2で追加された行を抽出(+)
diff -u ${file1 pacht}/file1 ${file2 pacht}/file2 | grep -E "^\+"
#file2では削除された行を抽出(-)
diff -u ${file1 pacht}/file1 ${file2 pacht}/file2 | grep -E "^\-"
  • 変更行についての解釈
    • contect modeは変更行は!で表示される
    • unified modeは変更行は削除(-) -> 追加(+)という形で表現されるみたい

diff outの見方

  • 結構雰囲気で見てるから、書いておく
  • diff -y ${file1 pacht}/file1 ${file2 pacht}/file2の場合
  • diff output
    • <

      < - denotes lines in file1.txt

    • >

      > - denotes lines in file2.txt