diff

diff は 2 つのテキストファイルの内容を比較し、その差分を抽出するコマンドである。ユーザー自身が自作したプログラムを更新した場合に、更新前と更新後を比較してどこに変更があったのか調べたいときに利用する。

ここで、file1.txt と file2.txt をそれぞれ次のように作成する。

file1.txtfile2.txt
apple
orange
pineapple
grape
melon
banana
watermelon
peach
strawberry

cherry
apple
orange
pear
pineapple
grape
melon
bananna
watermelon
peach
    strawberry
cherry

この 2 ファイルに対して、diff を実行すると、実行結果は次のように表示される。

diff file1.txt file2.txt
## 2a3
## > pear
## 6c7
## < banana
## ---
## > bananna
## 9,10c10
## <
## < strawberry
## ---
## >     strawberry

この結果は、file1.txt の 2 行目に比べて file2.txt の 3 行目(2a3)の方に pear が含まれている(> pear)。また、file1.txt の 6 行目と file2.txt の 7 行目を比較すると、前者は banana であり、後者は bananna であるため、両者は異なっている。最後に、file1.txt の 9-10 行目と file2.txt の 10 行目を比べると、前者には空行と "strawberry" であり、後者は "     strawberry" であり数個の空白文字を持つ。

ファイル内容の差分を求めるとき、空白を無視する場合は -w オプションを付ける。こうすることで、 "strawberry" と "     strawberry" は同じものとみなされる。

diff -w file1.txt file2.txt
## 2a3
## > pear
## 6c7
## < banana
## ---
## > bananna
## 10d10
## <

ファイル内容の差分を求めるとき、空白文字と空行の両方を共に無視する場合は -wB オプションを付ける。

diff -wB file1.txt file2.txt
## 2a3
## > pear
## 6c7
## < banana
## ---
## > bananna

ファイル内容の差分を unified 形式で出力する。

diff -u file1.txt file2.txt
## --- file1.txt	2017-03-08 23:48:28.000000000 +0900
## +++ file2.txt	2017-03-08 23:48:22.000000000 +0900
## @@ -1,11 +1,11 @@
##  apple
##  orange
## +pear
##  pineapple
##  grape
##  melon
## -banana
## +bananna
##  watermelon
##  peach
## -strawberry
## -
## +    strawberry
##  cherry