Diff
GNUではDiffutilsパッケージが製作されている。この中には、以下のものが含まれている。
cmp
diff
diff3
patch
以下、2つのファイル(original と new)を例に説明する:
コマンド diff original new を実行すると、以下の通常のdiff出力が生成される:
この伝統的な出力形式では、a は追加(added)、d は削除(deleted)、c は変更(changed)を意味する。a/d/cの各文字の前には元ファイルでの行番号が書かれ、後ろに変更後ファイルでの行番号が出力される。行頭の山括弧はその行が追加されたのか、または削除されたのかを示している。追加行とは新しいファイルで新たに出現した部分、つまり元のファイルに付け加えられた部分のことで、削除行は新しいファイルでは無くなった、つまり元ファイルから除かれた行のことを指す。
標準では新旧両ファイルに共通する箇所は出力されない。行を移動した場合は新しい場所へは追記として示され、以前の箇所では削除行として示される。
このアプローチによる研究にはベル研の同僚であったアルフレッド・エイホ、エリオット・ピンソン、ジェファーソン・ウルマン、ハロルド・S・ストーンの研究者らとの協力を受けて取り組んだ。
Unixにおいては、edラインエディタの利用が「編集スクリプト」機能という概念と自然に結びつくようなdiff機能を提供することとなった。edによる編集スクリプトと元ファイルとを両方保存しておけば、edコマンドだけで変更後のファイルを完全に再構成できることになる。これを利用することによりファイルの複数改版履歴を保存するのに必要なディスク容量を相当減らすことができる。マキロイは元々様々な形式で出力できるようなdiffを作りその出力を処理できるようなポストプロセッサを作ろうと考えていたが、文法そのものをdiff形式として規定してしまい、さらにedコマンドが解釈できるような逆順入力に対応するようなdiffコマンドを実装する方がずっと単純で楽にできると判断した。1985年にはラリー・ウォールがこのdiff出力を入力として受け取ってファイルを変更するというアイデアを一般化、拡張して別コマンドとしてpatchを作成した。