Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

cmp - Dateien zeichenweise vergleichen

&pagelevel(4)&pagelevel

(compare two files)


Mit cmp können Sie zwei Dateien zeichenweise vergleichen. Wenn es Unterschiede zwischen den beiden Dateien gibt, dann gibt cmp die Unterschiede auf die Standard-Ausgabe aus.

Wenn die beiden Dateien identisch sind, gibt cmp nichts aus.


Syntax


cmp[ -l|-s] datei1 datei2

Keine Option angegeben

Wenn die Dateien identisch sind, gibt cmp nichts aus.

Wenn sich die Dateien unterscheiden, gibt cmp die Zeichennummer und die Zeilennummer des ersten Unterschieds zwischen datei1 und datei2 in folgender Form aus:

datei1 datei2 differ: char zeichennummer, line zeilennummer

-l

Alle Unterschiede werden in folgender Form ausgegeben:

zeichennummer zeichen(datei1) zeichen(datei2)

zeichennummer ist die Position der abweichenden Zeichen ab Dateianfang. Dabei erhält das erste Zeichen einer Datei die Nummer 1, Leerzeichen werden mitgezählt. zeichennummer wird dezimal ausgegeben.

zeichen sind die voneinander abweichenden Zeichen in datei1 und datei2. zeichen werden oktal ausgegeben. Eine ASCII-Tabelle mit der Aufschlüsselung der oktalen Werte finden Sie in Tabellen und Verzeichnisse. Wenn die Dateien identisch sind, wird nichts ausgegeben.

-s

cmp gibt nichts aus. Der Wert des Endestatus wird zurückgeliefert, aber nicht automatisch am Bildschirm ausgegeben. Der Endestatus kann mit echo $? abgefragt werden.

datei1 datei2

Namen der Dateien, die Sie vergleichen wollen.

  • Wenn Sie für datei1 den Bindestrich - angeben, dann liest cmp von der Standard-Eingabe und vergleicht Ihre Eingaben mit datei2.

  • Wenn eine der beiden Dateien endet, ohne dass cmp einen Unterschied feststellen konnte, dann meldet cmp mit folgendem Text, dass in der kürzeren Datei EOF (Dateiende) erkannt wurde:

    cmp: EOF on datei

  • Wenn in einer von zwei sonst gleichen Dateien ein Zeichen fehlt, dann meldet cmp -l wegen der Verschiebung der Positionen alle folgenden Zeichen als unterschiedlich.

  • Dem ersten Zeichen einer Datei ist als zeichennummer die 1 und nicht die 0 zugeordnet.
  • Leerzeichen und Neue-Zeile-Zeichen zählen bei den zeichennummern mit.

Endestatus

0Dateien sind identisch
1Dateien sind unterschiedlich
>1Fehler: Auf Datei kann nicht zugegriffen werden, oder Argument fehlt.

Fehler

cmp: cannot open datei
Sie haben für eine Datei kein Leserecht oder eine der angegebenen Dateien existiert nicht.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos cmp:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten).

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Vergleich zweier Dateien mit Ausgabe der unterschiedlichen Zeichen und ihrer Position zeichennummer.

$ echo 1 2 3 4 5 7 8 a >dat1
$ echo 1 2 3 4 5 6 9 a >dat2
$ cmp -l dat1 dat2
    11 367 366
    13 370 371
$

Beispiel 2

Die Shell-Prozedur loesche.gl vergleicht zwei Dateien und löscht bei Gleichheit eine der beiden.

if cmp -s $1 $2
then
  rm $2
fi


Beim Aufruf der Prozedur mit

 $ loesche.gl dat1 dat2

übergeben Sie dat1 und dat2 als Stellungsparameter an die Prozedur. cmp liefert mit der Option -s den Endestatus zurück. Wenn sein Wert gleich 0 ist, wird dat2 gelöscht, sonst nicht.

Siehe auch

comm, diff