Wie man einen zeilenweisen Vergleich von Dateien unter Linux mit dem Befehl diff durchführt.

Wenn Sie ein Linux-Benutzer sind und Ihre Arbeit die Arbeit an verschiedenen Linux-Distributionen beinhaltet, kann es vorkommen, dass Sie Befehle auf einem Linux-System ohne GUI eingeben müssen. Das bedeutet, dass Sie nicht mehr auf Ihre bevorzugten GUI-Anwendungen zugreifen können – z.B. Gedit zur Dateibearbeitung – die Sie normalerweise für Ihre normale Arbeit verwenden.

Unabhängig davon, ob Sie ein Systemadministrator oder ein Entwickler sind, ist der Dateivergleich eine Aufgabe, die fast jeder Arbeit gemeinsam ist. Was ist, wenn Sie zwei Dateien vergleichen müssen, während Sie an einem reinen CLI-Linux-System arbeiten? Ihr bevorzugtes GUI-basiertes Vergleichstool wird Ihnen natürlich nicht zur Verfügung stehen, Sie müssen sich natürlich mit einem Kommandozeilenprogramm begnügen, um Ihre Arbeit zu erledigen.

Unter Linux kann der Befehl diff verwendet werden, um zwei Dateien zu vergleichen, aber die Sache ist, dass es eine leichte Lernkurve mit diesem Programm gibt. Wenn Sie nicht wissen, wie diff funktioniert, und nach einem schnellen Tutorial suchen, um loszulegen, suchen Sie nicht weiter, denn in diesem Artikel werden wir die Grundlagen dieses Befehls zusammen mit einigen leicht verständlichen Beispielen diskutieren.

Linux Diff Befehl

Anstatt direkt auf Beispiele zu springen, ist es gut, zuerst ein wenig über den Befehl zu wissen. Die Manpage des Befehls diff zeigt, dass das Tool Dateien Zeile für Zeile vergleicht. Seine Syntax ist:

diff [OPTION]... FILES

Während[OPTION] die verschiedenen Befehlszeilenoptionen des Tools repräsentiert, besteht FILES in der Regel aus ein paar Dateinamen. Obwohl die Man Page diff nützliche Informationen über den Befehl enthält, wird die vollständige Dokumentation für diff als Texinfo-Handbuch gepflegt. Wenn die Info- und Diff-Programme ordnungsgemäß auf Ihrer Website installiert sind, wird der Befehl

info diff

sollte Ihnen den Zugang zum vollständigen Handbuch ermöglichen.

Unterschiedliche Nutzungen/Beispiele

Lassen Sie uns nun besprechen, wie diff verwendet wird. Beginnen wir dazu mit einem einfachen Beispiel. Angenommen, es folgen die beiden Dateien, die wir vergleichen wollen:

Datei1:

test
test2
test3

Datei2:

test
test23
test3

So können Sie den Befehl diff verwenden, um diese beiden Dateien zu vergleichen:

diff file1 file2

Und hier ist die Ausgabe, die der obige Befehl erzeugt:

2c2
< test2
---
> test23

Die Ausgabe wirkt kryptisch, oder? Wir kommen gleich zur Sache. Lassen Sie uns zunächst die Grundstruktur der Ausgabe verstehen, die diff im Allgemeinen produziert.

Das erste, was zu beachten ist, ist, dass die Ausgabe die Änderungen darstellt, die erforderlich sind, um file1 (normalerweise die Originaldatei) in file2 (die neue oder geänderte Datei) zu transformieren. Die Ausgabe besteht in der Regel aus Zeilen, die mit einer Zahl (oder einem Bereich) beginnen, gefolgt von einem Alphabet (a, d oder c) und einer anderen Zahl (oder einem Bereich). Zum Beispiel 2c2 (von der obigen Ausgabe).

Die erste Zahl steht für die Zeile (oder den Zeilenumfang) aus Datei1 (Originaldatei), während die letzte Zahl die Zeile (oder den Zeilenumfang) aus Datei2 (die neue Datei) darstellt. Was das Alphabet dazwischen betrifft, repräsentiert hinzugefügt, ist für gelöscht, und stellt eine Änderung dar.

2c2 bedeutet also, dass sich die zweite Zeile in der Originaldatei geändert hat und durch die zweite Zeile aus der neuen Datei ersetzt werden muss, um die Dateien gleich zu machen. Wenn Sie die beiden Dateien (file1 und file2) manuell vergleichen, werden Sie sehen, dass dies genau der Fall ist.

Was die drei Zeilen betrifft, die im vorgenannten Beispiel 2c2 folgen, so ist diejenige, die mit'<‚ beginnt, nichts anderes als die zweite Zeile aus Datei1, und diejenige, die mit‘>‘ beginnt, ist nichts anderes als die betreffende Zeile aus Datei 2. Die drei Bindestriche dazwischen (—) dienen nur zu Trennungszwecken.

Müssen wir jetzt noch einmal auf die Ergebnisse des ersten Beispiels zurückkommen? Höchstwahrscheinlich nicht, da die obige Erklärung es selbsterklärend gemacht haben sollte. Nun, nehmen wir ein weiteres Beispiel.

Also, hier ist Datei 1:

Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

Hier ist file2:

Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

Hier ist der Befehl (der gleich bleibt):

diff file1 file2

Und hier ist die Ausgabe:

2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.

Man sieht also, dass in diesem Fall die Hauptausgabe – 2,4c2,4 – aus mehreren Zahlen besteht, sowohl vor als auch nach dem Alphabet. Dies sind im Grunde genommen Bereiche – 2,4 stellt die Liniennummer 2,3 und 4 dar. Die Ausgabe bedeutet also, dass sich die Zeilennummern 2 bis 4 in der Originaldatei (file1) geändert haben und durch die Zeilennummern 2 bis 4 aus file2 ersetzt werden müssen, um die Dateien gleich zu machen.

Weiter geht es, lassen Sie uns den Inhalt der Dateien ein wenig ändern. Während die Datei1 gleich bleibt, wird aus file2 nun file2:

Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

This is a diff command tutorial
from HowtoForge.
Hope you’ll benefit from it.
Thanks.

Wenn Sie nun den Befehl diff ausführen, wird die folgende Ausgabe erzeugt:

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>

So können Sie sehen, dass das Tool sofort erkannt hat, dass der zweite Absatz in file2 nichts anderes ist als das, was alle file1 enthalten. Die Ausgabe besagt also, dass die Zeilen 1 bis 5 von Datei2 am Anfang von Datei1 angehängt werden sollten, um die beiden Dateien gleich zu machen.

Und wenn Sie die letzte Zeile („Danke.“) aus Datei2 löschen, hier ist die Ausgabe:

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
> 
4d8
< Thanks.

Sie sehen, dass die Ausgabe nun auch 4d8 enthält, was bedeutet, dass die vierte Zeile in Datei1 gelöscht werden sollte, um beide Dateien ab Zeile 8 synchron zu halten. Natürlich ist dies, nachdem Sie die 0a1,5 Änderung, die zuerst erwähnt wird, angesprochen haben.

Fazit

Einverstanden, die Ausgabe des diff-Befehls ist nicht leicht zu verstehen, aber die Lernkurve ist nicht so steil. Verbringen Sie ein paar Stunden mit dem Tool, und Sie werden sich sicher damit abfinden. Was das Tutorial betrifft, so haben wir hier nur an der Oberfläche gekratzt. Werfen Sie einen Blick auf die Man Page des Befehls, und Sie werden feststellen, dass es noch viel mehr über diff zu lernen gibt. Es gibt auch ein separates Tutorial zum Linux find Befehl.

Das könnte dich auch interessieren …