Diff zeigt nur Unterschiede innerhalb der Linie

Diff zeigt nur Unterschiede innerhalb der Linie

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-commonwerden 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+}

wdiffkann auch vereinheitlichte Daten lesen, wenn Sie die Option oder diffangeben , zum Beispiel von :-d--diff-inputgit

git diff somefile | wdiff -d -3

Obwohl wdiffes sich nicht um ein POSIX-Tool handelt, ist es allgemein verfügbar.

verwandte Informationen