
Ich möchte Zeilen in zwei Dateien vergleichen, aber um Rauschen in der Ausgabe zu minimieren, möchte ich, dass nur die tatsächlichen Unterschiede in den Zeilen gedruckt werden.
Nehmen wir zum Beispiel die beiden folgenden Dateien:
eine.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z
b.txt
a B c d e f g h i j k l m n o p q r s t u v w x y z
(der Unterschied zwischen ihnen ist die Groß-/Kleinschreibung des Buchstabens b
)
Die Ausgabe soll etwa so aussehen:
[-b-]{+B+}
Der beste Ansatz, den ich derzeit gefunden habe, ist die Verwendung von git diff --word-diff
, dabei wird jedoch die ganze Zeile ausgegeben:
a [-b-]{+B+} c d e f g h i j k l m n o p q r s t u v w x y z
Gibt es eine direktere Möglichkeit, dies zu tun, als die Ausgabe manuell zu analysieren? Außerdem würde ich idealerweise etwas verwenden, das allgemeiner verfügbar ist git diff
, z. B. ein POSIX-Shell-Tool, bei dem der Benutzer keine zusätzlichen Pakete installieren muss.
Antwort1
Verwenden vonwdiff:
$ wdiff -3 a.txt b.txt
======================================================================
[-b-] {+B+}
======================================================================
Mit der Option -3
„oder“ ---no-common
werden in beiden Dateien gemeinsame Wörter entfernt und nur die Unterschiede angezeigt.
Das ===...
Banner (und leere Zeilen) können mit folgendem entfernt werden grep
:
$ wdiff -3 a.txt b.txt | grep -vx '=*'
[-b-] {+B+}
wdiff
kann auch vereinheitlichte Daten lesen, wenn Sie die Option oder diff
angeben , zum Beispiel von :-d
--diff-input
git
git diff somefile | wdiff -d -3
Obwohl wdiff
es sich nicht um ein POSIX-Tool handelt, ist es allgemein verfügbar.