Ich versuche, den Befehl linux diff für zwei Dateien zu verstehen, deren Zeilen nur eine gegenseitige Permutation darstellen, aber nicht in der Lage sind, die von ihm generierte Ausgabe zu analysieren. Betrachten Sie die drei folgenden Befehle:
[myPrompt]$ cat file1
apples
oranges
[myPrompt]$ cat file2
oranges
apples
[myPrompt]$ diff file1 file2
1d0
< apples
2a2
> apples
Kann mir jemand die obige kryptische Ausgabe von diff erklären.
- Warum werden in der Ausgabe überhaupt keine "Orangen" erwähnt?
- Was bedeutet
1d0
und2a2
bedeuten?
Ich verstehe aus dieser Antwort, dass:
"<" bedeutet, dass die Zeile in Datei2 fehlt und ">" bedeutet, dass die Zeile in Datei1 fehlt
ABER das erklärt nicht, warum Orangen in der Ausgabe fehlen.
oranges
der größte gemeinsame Teil der beiden Dateien ist, können Sie auf kürzeste Weise die Unterschiede zwischen den beiden Dateien ausdrücken.diff -u file1 file2
stattdessen einfach . Das nennt man "Unified Diff" -Format. Das ursprüngliche Diff-Format sollte sehr kompakt sein, aber einheitliche Diffs sollten viel besser lesbar sein.diff -y file1 file2
Antworten:
Denken Sie zum Verständnis des Berichts daran, dass dies
diff
eine Vorschrift ist, die beschreibt, welche Änderungen an der ersten Datei (file1
) vorgenommen werden müssen, damit sie mit der zweiten Datei (file2
) identisch ist .Insbesondere die
d
in-1d0
Mittel löschen und diea
in-2a2
Mittel fügen hinzu .Somit:
1d0
bedeutet, dass Zeile 1 infile1
(apples
) gelöscht werden muss .0
In der1d0
Zeile 0 steht, wo sie in der zweiten Datei (file2
) erschienen wären, wenn sie nicht gelöscht worden wären . Das bedeutet, dass beim Wechselfile2
infile1
(rückwärts) Zeile 1file1
nach Zeile 0 von angehängt wirdfile2
.2a2
bedeutet, die zweite Zeile (oranges
) vonfile2
an die nun zweite Zeile von anzuhängenfile1
(nach dem Löschen der ersten Zeile infile1
,oranges
umgeschaltet auf Zeile 1)quelle
0
in1d0
?Betrachten Sie diese Dateien:
file1
:file2
:Wie
diff
funktioniert es, wenn es auftragsbezogen ist?diff
Liest den ersten Zeilenblock vonfile1
undfile2
und versucht, gleiche Zeilen zu finden:Jetzt werden alle Zeilen übersprungen, die in beiden Dateien gleich sind.
oranges
Dies ist nur in diesem Fall der Fall:Suchen Sie nun einen anderen Satz ähnlicher Zeilen und drucken Sie die Unterschiede aus:
Überspringen Sie die ähnlichen Zeilen
Suchen Sie nach Möglichkeit identische Zeilen und drucken Sie die Unterschiede aus:
Wenn ich das tue
diff file1 file2
:Nun ist es einfach zu erklären, was
diff
die Ausgabe bedeutet:Um
file1
gleich zu machenfile2
:1,2d0
: Löschen (d
) Linien1-2
ausfile1
und Linie ändern0
vonfile2
entsprechend3a2
: Hänge (a
) an Zeile3
derfile1
Zeile2
von anfile2
4a4,5
: An Zeile von Zeilen von anhängen4
file1
4-5
file2
diff
vergleichtfile1
mitfile2
Zeile und setzt sich Unterschiede in der temporären Speicherzeile. Nachdemfile1
gleichfile2
bis zum ersten Auftreten einer Linie infile1
, die in tritt auch auffile2
, alle Zeilen, die gleich hoch sind , bis ein Unterschied nicht erwähnt werden, oft bezeichnet als---
. In diesem Fall gibt es nur eine ähnliche Zeile, nämlichoranges
. Beachten Sie, dass ichfile1
gleich gesagt habefile2
, alsofile1
relativ gesehen wirdfile2
und nicht umgekehrt.Die Ausgabe bezieht sich in diesem Fall auf die erste angegebene Datei
file1
.quelle
apples
kommt in beiden Dateien genauso gut vor.oranges
". Falsch: Es gibt eigentlich zwei Zeilen, die nicht nur ähnlich , sondern absolut identisch sind . Einer von ihnen liestoranges
, der andere liestapples
. Auch Ihre Erklärung (rein auftragsbezogen) steht im Widerspruch zu Stéphanes Kommentar zur Frage (längenbezogen) - wer ist richtig?Da sind sie:
quelle
Das Standardausgabeformat (alt) zeigt den Unterschied zwischen den Dateien ohne umgebenden Text mit Bereichen an, in denen sich die Dateien unterscheiden.
Beispiel:
1d0 <
(Löschen) bedeutet, dass die Äpfel aus der ersten Zeile von entfernt werden müssenfile1
, und2a2 >
(Anhängen) bedeutet, dass die Äpfel infile2
der zweiten Zeile hinzugefügt werden müssen , damit beide Dateien abgeglichen werden können.Die Dokumentation unter
info diff
erklärt es weiter:Siehe auch:
Um die Orangen zu sehen, müsste man sie entweder nebeneinander oder in einem einheitlichen Kontext unterscheiden.
Zum Beispiel:
quelle