diff(1) diff(1)
NAME
diff - Dateien zeilenweise vergleichen (differential)
SYNTAX
diff [option ...] datei1 datei2
BESCHREIBUNG
Das Kommando diff vergleicht die Inhalte von datei1 und datei2 und
schreibt nach Standardausgabe eine Liste von Änderungen, die notwendig
sind, um datei1 nach datei2 zu konvertieren. Diese Liste sollte mini-
mal sein. Wenn die Dateien identisch sind, wird keine Ausgabe erzeugt.
OPTIONEN
Keine Option angegeben:
Wenn die verglichenen Dateien gleich sind, gibt diff nichts aus.
Wenn die verglichenen Dateien Unterschiede aufweisen, gibt diff
aus:
1. Zeile[nbereich] aus ed-Kommando Zeile[nbereich] aus
datei1 datei2
2. Zeilen, die nur in datei1 stehen
3. Zeilen, die nur in datei2 stehen
Die Ausgabe hat folgendes Format:
a
1. n1[,n2] d n1[,n2]
c
2. < Text einer Zeile aus datei1
.
.
.
- - -
3. > Text einer Zeile aus datei2
.
.
.
a, d und c sind ed-ähnliche Kommandos. Sie bedeuten:
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
diff(1) diff(1)
a (append) anfügen
d (delete) löschen
c (change) ändern
Die Ausgabe lesen Sie folgendermaßen:
Die ed-Kommandos a, d und c mit den davorstehenden Zeilen-
(bereichs)angaben zeigen, wie datei1 in datei2 umzuwandeln ist.
Wenn Sie a durch d und d durch a ersetzen und die rechts stehen-
den Zeilen(bereichs)angaben verwenden, sehen Sie, wie datei2 in
datei1 umzuwandeln ist. Zeilen aus datei1 sind mit < gekennzeich-
net, aus datei2 mit >.
-a diff gibt alle Zeilen von datei1 und datei2 aus. Zeilen, die nur
in datei1 vorkommen, werden mit einem Strich - gekennzeichnet.
Zeilen, die nur in datei2 vorkommen, werden mit einem Pluszeichen
+ gekennzeichnet. Zeilen, die in beiden Dateien identisch sind,
werden mit einem Leerzeichen <blank> gekennzeichnet.
-b diff berücksichtigt weder Leerzeichen und Tabulatorzeichen am
Zeilenende, noch unterschiedlich lange Folgen von Leerzeichen
innerhalb von Zeilen an derselben Stelle. Leerzeichen am Zeilen-
anfang werden als Differenz ausgegeben, ebenso Leerzeilen.
-i Nicht mit Option -h zu verwenden.
diff berücksichtigt Groß- und Kleinschreibung nicht, z. B. wird
"A" nicht von "a" unterschieden.
-t diff expandiert Tabulatorzeichen in der Ausgabe. Bei Option -c
oder normaler Ausgabe fügt diff gelegentlich am Zeilenanfang Zei-
chen ein, die die Einrückung der ursprünglichen Zeilen verfäl-
schen und dadurch die Interpretation der Ausgabe erschweren.
Diese Option erhält die ursprüngliche Einrückung aufrecht.
-w diff berücksichtigt keine Leer- und Tabulatorzeichen und unter-
scheidet nicht zwischen verschieden langen Folgen von Leer- und
Tabulatorzeichen. Z. B. wird die Zeichenkette "if ( a = = b )"
als identisch mit "if(a==b)" angesehen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
diff(1) diff(1)
Die folgenden Optionen schließen sich gegenseitig aus:
-c diff erzeugt eine dreiteilige Liste, wobei das Ausgabeformat
leicht abgeändert ist. Zuerst werden Namen und Entstehungsdatum
von datei1 und datei2 angezeigt. Dann werden die Kontrastzeilen
ausgegeben, wobei die Zeilen, die nicht in datei2 vorkommen, mit
einem Minuszeichen - versehen sind, die Zeilen, die nicht in
datei1 vorkommen, mit einem Pluszeichen + versehen sind und die
Zeilen, die sich in datei1 und datei2 unterscheiden, mit einem
Ausrufezeichen ! versehen sind. Zusätzlich werden die drei Zeilen
vor und die drei Zeilen hinter den jeweiligen Kontrastzeilen aus-
gegeben.
-C zahl
diff gibt im gleichen Format aus wie bei der Option -c, zeigt
jedoch außer den sich unterscheidenden Stellen auch jeweils zahl
Zeilen davor und zahl Zeilen dahinter an.
-e Nicht mit Option -h, -l oder -s zu verwenden.
diff erzeugt ein ed-Skript und gibt es aus. Das ed-Skript enthält
die Kommandos a, d und c, sowie die zugehörigen Textzeilen, mit
denen der Editor ed datei1 in datei2 umwandeln kann. Hierfür muß
das ed-Skript an den Editor ed als Eingabe übergeben werden. Vor-
her müssen allerdings die Anweisungen w und q an das Ende des
ed-Skripts geschrieben werden. Außerdem müssen Sie an den Anfang
das Kommando e datei1 setzen [siehe ed(1)].
-f Nicht mit Option -h zu verwenden.
diff erzeugt ein ähnliches Skript wie bei Option -e, nur in der
umgekehrten Richtung. Dieses Skript eignet sich aber nicht als
Eingabe für ed.
Die unter -e und -f erstellten ed-Skripts sind möglicherweise
nicht korrekt, wenn die verglichenen Zeilen nur aus einem einzel-
nen Punkt . bestehen.
Die folgenden Optionen beeinflussen die Arbeitsweise von diff:
-h Nicht mit Option -e, -f, -i, -c, -C, -n und -D zu verwenden.
diff arbeitet schneller, und die Dateien können beliebig lang
sein. Allerdings ist das Ergebnis bei Option -h nicht zuverläs-
sig!
-n diff erzeugt, ähnlich wie bei der Option -e, ein Skript. Dort
stehen die ed-Kommandos jedoch in umgekehrter Reihenfolge. Außer-
dem steht hinter jedem Insert- oder Delete-Kommando die Anzahl
der zu ändernden Zeilen.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
diff(1) diff(1)
-D zeichenkette
datei1 und datei2 sollten in diesem Fall C-Quellprogramme oder
C-Quellprogrammteile enthalten. diff erzeugt ein C-Quellprogramm
aus datei1 und datei2, in das es Angaben für den C-Präprozessor
einfügt. Wird dieses Programm übersetzt, dann entsteht eine über-
setzte datei1, wenn zeichenkette nicht definiert ist. Es ergibt
sich eine übersetzte datei2, wenn zeichenkette definiert ist.
Die folgenden Optionen werden zum Vergleich von Verzeichnissen verwen-
det:
-l diff gibt im langen Format aus. Vor der Ausführung von diff wird
jede Textdatei in Seiten zerteilt, indem sie durch eine Pipeline
zu pr gesendet wird. Weitere Unterschiede werden gesammelt und am
Stück ausgegeben, nachdem alle textspezifischen Unterschiede
angezeigt sind.
-r diff arbeitet rekursiv alle gemeinsamen Unterverzeichnisse ab.
-s diff zeigt an, welche Dateien übereinstimmen. Standardmäßig
unterbleibt dies.
-S name
diff bearbeitet ein Verzeichnis erst ab der Datei name.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei1 mit -
beginnt.
datei1 datei2
Namen der Dateien, die diff vergleichen soll. Ist datei1 ein Ver-
zeichnis, dann wird aus diesem Verzeichnis die Datei datei2 für
den Vergleich mit datei2 herangezogen. Ist datei2 ein Verzeich-
nis, dann wird mit datei1 aus diesem Verzeichnis verglichen.
ENDESTATUS
0 Dateien sind identisch
1 Dateien sind nicht identisch
>1 Eingabefehler
FEHLERMELDUNGEN
diff: two filename arguments required
Sie haben eine falsche Anzahl Dateien angeben. Es können nur zwei
Dateien verglichen werden.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
diff(1) diff(1)
diff: No such file or directory
Eine der angegebenen Dateien existiert nicht.
diff: files too big, try -h
Sie müssen die Option -h angeben, da die zu vergleichenden Dateien zu
groß sind.
diff: Permission denied
Sie haben kein Leserecht für eine der angegebenen Dateien.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert ist, wird
der Wert von LANG als Standardwert herangezogen. Ist auch LANG nicht
oder als leere Zeichenkette definiert, verhält sich das System so, als
wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
Beispiel 1
Die Dateien datei1 und datei2 haben folgenden Inhalt:
datei1: datei2:
Amsel Drossel Amsel und Drossel
Fink und Star Fink Star
und die ganze Vogelschar
Vogelschar
Mit dem Aufruf von diff können Sie genau feststellen, in welchen Zei-
len sich die beiden Dateien unterscheiden:
$ diff datei1 datei2
1,3c1,2
<Amsel Drossel
<Fink und Star
<und die ganze
---
>Amsel und Drossel
>Fink Star
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
diff(1) diff(1)
Das bedeutet: Um aus datei1 datei2 zu erzeugen, müssen die Zeilen 1
bis 3 aus datei1 (1,3) ersetzt werden (c) durch die Zeilen 1 bis 2
(1,2) aus datei2. Was in diesen Zeilen jeweils steht, ist an den mit <
oder > beginnenden Ausgabezeilen zu sehen: mit < beginnen die Zeilen,
die nur in datei1, mit > die Zeilen, die nur in datei2 stehen.
Beispiel 2
Dateien vergleichen und ein ed-Skript erstellen:
Inhalt von datei1: Inhalt von datei2:
heute ist Montag heute ist Dienstag
es ist kalt es ist Herbst
es ist kalt
Nach folgendem Aufruf gibt diff die ed-Kommandos aus, mit denen ed
datei1 in datei2 umwandeln kann. Um das Resultat dieses Aufruf als
Eingabe für den ed benutzen zu können, müssen Sie noch die Anweisungen
w und q anfügen [siehe ed(1)].
$ diff -e datei1 datei2
1c
heute ist Dienstag
es ist Herbst
.
$
SIEHE AUCH
bdiff(1), cmp(1), comm(1), diff3(1), dircmp(1), ed(1), pr(1).
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98