テキスト処理
比較とパッチ
diff・patch・cmp で、2つのファイルやディレクトリの違いを調べて当てる。
diff違いを表示する
2つのファイルやフォルダを比べて、違うところを表示します。
| オプション | 意味 |
|---|---|
-u | 前後3行も含めた「unified形式」(パッチやgitと同じ見た目) |
-r | ディレクトリを再帰的に比べる |
-q | 違うかどうかだけ表示 |
-y | 左右に並べて表示(-W 160 で幅を指定) |
-w / -b | 空白の違いを無視 / 空白の数の違いを無視 |
-i | 大文字小文字を無視 |
--color | 色を付ける |
$ diff -u old.conf new.conf
$ diff -u --color old.conf new.conf | less -R
$ diff -rq dir1/ dir2/ # 違うファイルの名前だけ
$ diff -y -W 120 a.txt b.txt
$ diff <(ls dir1) <(ls dir2) # コマンドの出力どうしを比べるunified 形式の読み方:
--- old.conf 2026-09-24
+++ new.conf 2026-09-25
@@ -3,4 +3,4 @@
listen 80;
-server_name old.example.com;
+server_name new.example.com;
root /var/www;- で始まる行が消えた行、+ で始まる行が増えた行です。
patch差分を当てる
diff で作った差分(パッチ)をファイルに当てて、同じ変更を再現します。
$ diff -u original.c fixed.c > fix.patch
$ patch original.c < fix.patch
$ patch -p1 < changes.patch # パスの先頭1階層を外して当てる(gitの差分は -p1)
$ patch -p1 --dry-run < changes.patch # 実際には当てずに試す
$ patch -R -p1 < changes.patch # 当てた差分を戻すcmpバイナリを含めて一致するか比べる
2つのファイルが同じかどうかを、バイナリも含めて1バイトずつ比べます。
$ cmp a.bin b.bin
a.bin b.bin differ: byte 1025, line 3
$ cmp -s a.bin b.bin && echo 同じsdiff左右に並べて比べる
2つのファイルを左右に並べて比べます。
$ sdiff -s old.txt new.txt # 違う行だけ並べて表示