diffを使いこなす!差分の見やすい表示方法

プログラミングカテゴリー

ファイルの差分を調べるために利用されるdiff コマンドの便利な使い方を紹介します。

diff コマンドのデフォルト出力は、非常に理解が難しいですよね。

簡単に差分を理解するために、gitのようなunified形式や横並びに差分を表示する方法を紹介します。

ポイント

覚えるべきは下記オプションです!

  • -u:unified形式で出力
  • -c:context形式で出力
  • -y:横並びで表示
  • -q:変更があるかないかのみを通知
  • -r::ディレクトリを再帰的に検索

サンプルファイル

今回利用するサンプルです。

$ cat test1.txt
This is a pen.
That is a apple. ★ココが違います
These are test contents.

$ cat test2.txt
This is a pen.
Those are three apples. ★ココが違います
These are test contents.

-uオプション:gitのようなunified形式で差分を表示

最初に紹介するのは、gitでよく見る差分表示方法で出力する方法です。

unified形式と呼ばれています。(参考:Example Unified Format

$ diff -u test1.txt test2.txt
--- test1.txt   2021-11-20 13:53:13.952066951 +0900
+++ test2.txt   2021-11-20 13:58:38.822072474 +0900
@@ -1,3 +1,3 @@
 This is a pen.
-That is a apple.
+Those are three apples.
 These are test contents.

gitに慣れている方にはわかりやすいと思います。

-+で差分が表示されます。

-cオプション:コンテキスト形式で表示

-cオプションは、差分のある個所の前後も出力してくれるオプションです。

文脈(コンテキスト)を理解することができます。

$ diff -c test1.txt test2.txt
*** test1.txt   2021-11-20 13:53:13.952066951 +0900
--- test2.txt   2021-11-20 13:58:38.822072474 +0900
***************
*** 1,3 ****
  This is a pen.
! That is a apple.
  These are test contents.
--- 1,3 ----
  This is a pen.
! Those are three apples.
  These are test contents.

差分がある部分がで表示されていますね。

-yオプション:差分を横並びで表示

ファイルの差分を横並びで表示してくれます。

わかりやすいのですが、画面の横幅が十分にないときれいに表示されません。

$ diff -y test1.txt test2.txt
This is a pen.                                                  This is a pen.
That is a apple.                                              | Those are three apples.
These are test contents.                                        These are test contents.

差分がある行にが表示されていることがわかります。

-qオプション:変更があるかどうかのみを表示

-qオプションは、ファイルに差分があるかどうかを教えてくれます。

$ diff -q test1.txt test2.txt
Files test1.txt and test2.txt differ

バイナリファイルなどの差分を調べるのに便利ですね。

また、下記のようにディレクトリの差分を調べるためにも利用されます。

ディレクトリの差分を調べる

下記のように、test1とtest2ディレクトリを用意して、diff1.txtのみが異なるサンプルを用意しました。

$ tree test1
test1
├── diff1.txt
├── only1.txt
├── same1.txt
└── same2.txt

$ tree test2
test2
├── diff1.txt
├── same1.txt
└── same2.txt

$ diff -qr test1 test2
Files test1/diff1.txt and test2/diff1.txt differ
Only in test1: only1.txt

-qrオプションで、異なるファイルがどれかが簡単に把握可能です。

まとめ

この記事ではdiffコマンドの便利な使い方を紹介しました。

デフォルトのdiffは使いにくいので、-u-y-cはおすすめです!

今回はオプションで差分表示をわかりやすくする方法を紹介しましたが、ほかにも色付けしてわかりやすくする方法もあります。

気になる方は、git diffやcolordiffで調べてみてください。