Ich möchte 'diff' verwenden, um einen Unterschied zwischen Zeilen und Zeichen zu erhalten. Betrachten Sie zum Beispiel:
Datei 1
abcde
abc
abcccd
Datei 2
abcde
ab
abccc
Mit diff -u bekomme ich:
@@ -1,3 +1,3 @@
abcde
-abc
-abcccd
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Es zeigt mir jedoch nur, dass sich diese Zeilen geändert haben. Was ich gerne sehen würde, ist so etwas wie:
@@ -1,3 +1,3 @@
abcde
-ab<ins>c</ins>
-abccc<ins>d</ins>
\ No newline at end of file
+ab
+abccc
\ No newline at end of file
Du verstehst meinen Drift.
Jetzt weiß ich, dass ich andere Motoren verwenden kann , um den Unterschied in einer bestimmten Zeile zu markieren / zu überprüfen. Aber ich würde lieber ein Tool verwenden, das alles erledigt.
text
command-line
diff
VitalyB
quelle
quelle
Antworten:
Git hat einen Wortunterschied, und wenn Sie alle Zeichen als Wörter definieren, erhalten Sie effektiv einen Zeichenunterschied. Änderungen an Zeilenumbrüchen werden jedoch ignoriert .
Beispiel
Erstellen Sie ein Repository wie folgt:
Jetzt tun
git diff --word-diff=color --word-diff-regex=. master^ master
Sie und Sie erhalten:Beachten Sie, wie sowohl Hinzufügungen als auch Löschungen auf Zeichenebene erkannt werden, während Hinzufügungen und Löschungen von Zeilenumbrüchen ignoriert werden.
Vielleicht möchten Sie auch eines davon ausprobieren:
quelle
git diff --word-diff=color --word-diff-regex=. file1 file2
--no-index
die Antwort von @ qwertzguys oben ergänzen , damit sie außerhalb eines Git-Repos für mich funktioniert. Also:git diff --no-index --word-diff=color --word-diff-regex=. file1 file2
--no-index
innerhalb eines Repos hinzufügenSie können verwenden:
colordiff
ist ein Ubuntu-Paket. Sie können es mit installierensudo apt-get install colordiff
.diff-highlight
ist von git (seit Version 2.9). Es befindet sich in/usr/share/doc/git/contrib/diff-highlight/diff-highlight
. Sie können es irgendwo in Ihrem platzieren$PATH
.quelle
brew install colordiff
diff-highlight
in$(brew --prefix git)/share/git-core/contrib/diff-highlight/diff-highlight
diff-highlight
kann auch mit Python's Pip installiert werden -pip install diff-highlight
(ich bevorzuge es auch, wenn Git über Brew installiert wird)Pythons Difflib ist ein Ass, wenn Sie dies programmgesteuert tun möchten. Für die interaktive Verwendung verwende ich den Diff-Modus von vim (einfach zu bedienen: Rufen Sie einfach vim mit auf
vimdiff a b
). Gelegentlich verwende ich auch Beyond Compare , das so ziemlich alles macht, was man sich von einem Diff-Tool erhoffen kann.Ich habe kein Befehlszeilentool gesehen, das dies sinnvoll macht, aber wie Will bemerkt, könnte der difflib-Beispielcode helfen.
quelle
Sie können den
cmp
Befehl in Solaris verwenden:quelle
cmp
ist auch auf (zumindest einigen) Linux-Distributionen verfügbar.-l -b
.Python hat eine praktische Bibliothek mit dem Namen,
difflib
die Ihnen bei der Beantwortung Ihrer Frage helfen kann.Im Folgenden sind zwei Oneliner aufgeführt, die
difflib
für verschiedene Python-Versionen verwendet werden.Diese können als Shell-Alias nützlich sein, der sich leichter mit Ihrem bewegen lässt
.${SHELL_NAME}rc
.Und eine besser lesbare Version zum Einfügen in eine eigenständige Datei.
quelle
Hat gut für mich funktioniert. Die Zahl ganz links im Ergebnis gibt die Anzahl der Zeichen an, die sich unterscheiden.
quelle
cmp -l file1 file2 | wc -l
Ich habe auch mein eigenes Skript geschrieben , um dieses Problem mit dem längsten gemeinsamen Subsequenzalgorithmus zu lösen .
Es wird als solches ausgeführt
JLDiff.py a.txt b.txt out.html
Das Ergebnis ist in HTML mit roter und grüner Färbung. Größere Dateien benötigen exponentiell mehr Zeit für die Verarbeitung, dies führt jedoch einen echten Zeichen-für-Zeichen-Vergleich durch, ohne zuerst Zeile für Zeile zu überprüfen.
quelle
Farbige Ausgabe auf Charakterebene
diff
Folgendes können Sie mit dem folgenden Skript und dem Diff-Highlight (das Teil von git ist) tun :
( Dank an die Antwort von @ retracile für die
sed
Hervorhebung)quelle
command | gvim -
wird tun was du willst.git
Ihres Pfades enthalten, aber nicht auf diesem platziert zu sein. Eine meiner Maschinen, an der das lebt/usr/share/doc/git/contrib/diff-highlight
.Pythons Difflib kann dies tun.
Die Dokumentation enthält ein Beispiel für ein Befehlszeilenprogramm für Sie.
Das genaue Format entspricht nicht Ihren Angaben, es ist jedoch unkompliziert, entweder die Ausgabe im ndiff-Stil zu analysieren oder das Beispielprogramm zu ändern, um Ihre Notation zu generieren.
quelle
Hier ist ein Online-Textvergleichstool: http://text-compare.com/
Es kann jedes einzelne Zeichen hervorheben, das anders ist, und den Rest weiter vergleichen.
quelle
catdog
undcat\ndog
wird nur aufcat
Ich denke, die einfachere Lösung ist immer eine gute Lösung. In meinem Fall hilft mir der folgende Code sehr. Ich hoffe es hilft jemand anderem.
Sie können zwei Dateien mit der folgenden Syntax an Ihrem bevorzugten Terminal vergleichen:
quelle
Wenn Sie Ihre Dateien in Git behalten, können Sie mit dem Diff-Highlight-Skript zwischen verschiedenen Versionen unterscheiden , das verschiedene Zeilen mit hervorgehobenen Unterschieden unterscheiden.
Leider funktioniert es nur, wenn die Anzahl der entfernten Zeilen mit der Anzahl der hinzugefügten Zeilen übereinstimmt. Es gibt einen Stub-Code für den Fall, dass die Zeilen nicht übereinstimmen. Vermutlich könnte dies in Zukunft behoben werden.
quelle
Keine vollständige Antwort, aber wenn
cmp -l
die Ausgabe nicht klar genug ist, können Sie Folgendes verwenden:quelle
Die meisten dieser Antworten erwähnen die Verwendung von Diff-Highlight , einem Perl-Modul. Aber ich wollte nicht herausfinden, wie man ein Perl-Modul installiert. Deshalb habe ich ein paar kleinere Änderungen vorgenommen, um ein in sich geschlossenes Perl-Skript zu erstellen.
Sie können es installieren mit:
Und die Verwendung (wenn Sie das
colordiff
in der Antwort von zhanxw erwähnte Ubuntu haben):Und die Verwendung (wenn Sie nicht):
quelle