diffコマンドでファイル全体を表示する
こんにちは。望月です。
今日は皆さん大好きdiffコマンドについて、便利な技を初めて知ったので残しておきます。
ファイル全体を表示する
diffは2つのテキストファイルの差分を表示してくれる大変便利なコマンドです。普通にdiffを利用すると差分のある行のみ、unified diff(-uオプション)を利用すると差分のあった行から前後3行が表示されます。
$ cat a.txt 1 2 3 4 5 6 7 8 9 10 $ cat b.txt 1 2 3 4 4 6 7 8 9 10 $ diff a.txt b.txt 5c5 < 5 --- > 4 $ diff -u a.txt b.txt --- a.txt 2014-08-30 17:53:31.000000000 +0900 +++ b.txt 2014-08-30 17:53:44.000000000 +0900 @@ -2,7 +2,7 @@ 2 3 4 -5 +4 6 7 8
上記の例だとあまり旨味がありませんが、ソースコードのdiffをとっている時などには「あれ、これどのメソッドだ?」ってなることもあると思います。そんな時にはファイル全体を表示して、差分のある行をマークしてくれると嬉しいですよね。
調べていたところ、参考資料に書いたサイトに答えがまるごと書いてありました。以下の方法で実現できます。
diff --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L' file1 file2
--new-line-formatなどのオプションで、それぞれの行に対しての表示形式を指定しています。そのなかで--unchanged-line-formatを指定することで、差分のない行も表示できます。
長いのでalias登録しておくとよいでしょう。
$ alias wholediff="diff --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L'"
上の例で試してみると、ファイル全体が表示されることが確認できました。
$ wholediff a.txt b.txt 1 2 3 4 -5 +4 6 7 8 9 10