Ich möchte Zeilen in zwei Dateien vergleichen, aber um das Rauschen in der Ausgabe zu minimieren, möchte ich, dass nur die tatsächlichen Unterschiede in den Zeilen gedruckt werden.
Zum Beispiel angesichts der beiden folgenden Dateien:
a.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 der Fall des Briefes b
)
Ich möchte, dass die Ausgabe ungefähr so aussieht:
[-b-]{+B+}
Derzeit war der beste Ansatz, den ich gefunden habe, die Verwendung git diff --word-diff
, aber er gibt die gesamte Zeile aus:
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, als die Ausgabe manuell zu analysieren? Idealerweise würde ich auch etwas verwenden, das allgemeiner verfügbar ist als git diff
z. B. ein POSIX-Shell-Tool, bei dem der Benutzer keine zusätzlichen Pakete installieren muss.
shell-script
diff
anol
quelle
quelle
b
undB
so ist es offensichtlich? Ich verstehe, dass dies wahrscheinlich der eigentliche Unterschied war, aber für die Zwecke der Frage können Sie es einfacher machen.Antworten:
Mit wdiff :
Die Option
-3
oder---no-common
entfernt Wörter, die zwischen den beiden Dateien gemeinsam sind, und zeigt nur die Unterschiede an.Das
===...
Banner (und leere Zeilen) können entfernt werden mitgrep
:wdiff
Sie können auch einheitlichediff
Daten lesen , wenn Sie die Option-d
oder--diff-input
angeben, z. B. vongit
:Obwohl
wdiff
es sich nicht um ein POSIX-Tool handelt, ist es allgemein verfügbar.quelle
alias wdiff="wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m'"
(von hier aus ).