10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

diffコマンドの表示形式についてまとめてみる

Last updated at Posted at 2024-08-08

概要

2つのファイルの差分を表示するdiffコマンドですが、オプションによって様々な形式で表示するがことできます。
オプションがなかなか覚えられず、diffコマンドを使用する際にいつも調べ直してしまうので、記事にまとめて知識を整理しておこうと思います。

この記事で取り扱う表示形式

  • オプションなしの形式
  • -uオプションを使用した形式(ユニファイド形式)
  • -yオプションを使用した形式

今回比較する2ファイル

以下のbefore.txt(元のファイル)とafter.txt(編集後のファイル)を比較してみたいと思います。

before.txt
before only

not changed
changed
after.txt

after only
not changed
changed!!!!!

オプションなしの場合

オプションなしでdiffコマンドを使用した場合の出力は以下のようになります。

コマンド
diff before.txt after.txt
出力結果
1d0
< before only
2a2
> after only
4c4
< changed
---
> changed!!!!!

ここでdは削除(delete)、aは追加(add)、cは変更(change)を表しています。

つまり
1d0: 元のファイルの1行目が削除された
2a2: 新しいファイルの2行目に追加された
4c4: 4行目が変更された
という情報が示されており、各変更内容(あるいは削除・追記内容)がその下に書かれています。慣れないと難しいですね。

-uオプションを使用した場合

-uを使用した出力形式はユニファイド形式と呼ばれます。

コマンド
diff -u before.txt after.txt
出力結果
--- before.txt	2024-08-01 20:00:00
+++ after.txt	2024-08-01 20:05:30
@@ -1,4 +1,4 @@
-before only
 
+after only
 not changed
-changed
+changed!!!!!

最初の2行は比較したファイルの名前と更新日時が表示されます。

その次の@@から始まる行は、比較したそれぞれのファイルの変更開始行と何行分の変更表示をしているかを示しています。
今回のケースだと、両ファイルともに1行目から4行分の変更表示をしていることを表します。
その次の行からが変更内容の詳細です。
-が書かれている行は削除された行、+が書かれている行は追加された行を表しています。

この@@から始まる行からその変更詳細までの単位のことを「ハンク」と呼びます。
今回はハンクが1つだけしか表示されていませんが、もう少し長いファイルなどで試してみるとハンクが複数表示されます。

各ハンクには変更行だけでなく、変更の前後何行かも併せて表示されています。
そのため、ユニファイド形式は似たような変更箇所が多い場合に、ファイルのどの部分が変更されたのかを確認しやすいという特長があります。

-yオプションを使用した場合

個人的には一番使いやすい表示形式です。
比較結果を1行ごとに出力してくれます。

コマンド
diff -y before.txt after.txt
出力結果
before only							<       
									
								>       after only
not changed								not changed
changed								|       changed!!!!!

各行の結果が1行ごとに表示されており、
<: 左のファイルにのみ存在
>: 右のファイルにのみ存在
|: 内容不一致
を表しています。
(上記の3種類が表示されていない行は一致を表します。)

1行ごとに表示してくれるので、以下のように左のファイルにのみ存在する内容を抜き出す操作などに便利です。

コマンド
diff -y before.txt after.txt | grep '<' | cut -f 1
出力結果
before only

まとめ

今回はdiffコマンドの3種類の表示形式についてまとめてみました。
diffコマンドには他にも様々なオプションがあるので、興味のある方はman diffコマンド等で確認してみてください!

参考

新しいLinuxの教科書 第2版

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?