Unix Diff Side-to-Side-Ergebnisse?

106

Wie kann ich die Ergebnisse eines Unix-Diff-Befehls Seite an Seite anstatt eines Unterschieds nach dem anderen darstellen? Unten finden Sie ein Beispiel:

    diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf
< asdfsad
< fsaf
< fdsadf
---
> asdfsafdsf
> saf
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa
< fd
---
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> sadf
> safa

Ich hätte gerne so etwas wie:

diff /tmp/test1  /tmp/test2
1,4c1,2
< asfdsadf       > asdfsafdsf
< asdfsad        > saf       
< fsaf
< fdsadf
---
6,8d3
< sadf
< asdf
< sadf
10d4
< fasd
12,13c6,14
< sadfa               > sadf
< fd              > sadf
---               > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > sadf
              > safa
719016
quelle
vimdiff kann auch helfen. Viel Glück.
Shellter

Antworten:

168

Von man diffkönnen Sie verwenden -y, um nebeneinander zu tun.

-y, --side-by-side
       output in two columns

Sagen Sie daher:

diff -y /tmp/test1  /tmp/test2

Prüfung

$ cat a                $ cat b
hello                  hello
my name                my name
is me                  is you

Vergleichen wir sie:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you
fedorqui 'SO hör auf zu schaden'
quelle
39
Beachten Sie, dass diffdie maximale Ausgabebreite fest codiert ist (130 Spalten). Fügen Sie die Option diff hinzu --width=$COLUMNS, um dies auf Ihre Terminalbreite einzustellen.
ntc2
6
Auch für große Unterschiede pfeifen Sie einfach in weniger wie diese für ein schönes scrolly / durchsuchbares Diff:diff -y /tmp/test1 /tmp/test2 | less
Willbradley
Check out Colordiff
Vladislavs Dovgalecs
5
besserdiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77
@ rubo77 Abhängig davon, wie Sie die Registerkartenerweiterung eingerichtet haben, möchten Sie möglicherweise auch Registerkarten auf Leerzeichen erweitern, damit die Ausgabe ordnungsgemäß in Spalten ausgerichtet wird:diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
EdwardTeach
40

Von der Homepage von icdiff :

Geben Sie hier die Bildbeschreibung ein

Ihr Terminal kann Farben anzeigen, aber die meisten Diff-Tools nutzen sie nicht gut. Durch Hervorheben von Änderungen kann icdiff Ihnen die Unterschiede zwischen ähnlichen Dateien anzeigen, ohne sie zu stören. Dies ist besonders hilfreich, um kleine Änderungen in vorhandenen Zeilen zu identifizieren und zu verstehen.

Anstatt zu versuchen, ein Diff-Ersatz für alle Umstände zu sein, ist das Ziel von icdiff, ein Werkzeug zu sein, mit dem Sie ein besseres Bild davon bekommen können, was sich geändert hat, wenn es aus Diff nicht sofort ersichtlich ist.

IMHO ist seine Ausgabe viel besser lesbar als diff -y.

timmfin
quelle
29
diff -y --suppress-common-lines file1 file2
Rjazhenka
quelle
3
Dies sollte die akzeptierte Antwort sein, da nur -ygemeinsame Linien angezeigt werden, die nicht mit gerecht diffund der ursprünglichen Frage identisch sind . +1.
Helix
besserdiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77
13

Sie können verwenden:

sdiff  file1 file2

oder

diff -y file1 file2

oder

vimdiff file1 file2

für nebeneinander angezeigte Anzeige.

srpatch
quelle
2
Ich habe mich gefragt, was der Unterschied zwischen diff -yund ist sdiff. Ihre Ausgabe sieht für mich identisch aus.
Hux
11

Sie sollten sdifffür das Nebeneinander Zusammenführen von Dateidifferenzen haben. Lesen Sie man sdiffdie ganze Geschichte durch.

Chris Seymour
quelle
2
Auf meinem System (GNU / Linx) sdiffscheint das Gleiche zu tun wie diff -yund die sdiffInfodokumentation besagt, dass es veraltet ist: "'sdiff' ohne '--output' ('-o') erzeugt einen Nebeneinander-Unterschied. Diese Verwendung ist veraltet; verwenden Sie stattdessen die Option '--side-by-side' ('-y') von 'diff'. "
NTC2
7

Sie können einfach verwenden:

diff -y fileA.txt fileB.txt | colordiff

Es zeigt die Ausgabe in zwei Spalten aufgeteilt und koloriert! ( colordiff)

Jorge Fernando Matricali
quelle
1
Habe es gerade unter OSX versucht und es funktioniert hier nicht. Vielleicht ist es nur für Linux.
Nikola Petkanski
colordiff ist nicht auf osx.
Terry Franguiadakis
Sie können colordiff unter OSX mit Homebrew installieren. brew install colordiff Siehe colordiff Formel
Jorge Fernando Matricali
6

Verwenden Sie die -yOption:

diff -y file1 file2
rectummelancolique
quelle
6

Versuchen Sie es mit cdiff - Zeigen Sie farbige, inkrementelle Unterschiede im Arbeitsbereich oder von stdin mit Side-by- Side- und Auto-Pager-Unterstützung an.

ymattw
quelle
5

Sie können verwenden vimdiff.

Beispiel:

vimdiff file1 file2
Eduardo Cuomo
quelle
4

Wenn in Ihren Dateien Leerzeichen und Tabulatoren inkonsistent verwendet werden, kann es hilfreich sein, das -tArgument zum Erweitern der Tabulatoren anzugeben:

diff -ty file1 file2
Eimer
quelle
1

Verbesserter Diff-Befehl mit Farbe, nebeneinander und Alias

Angenommen, der Dateiinhalt ist wie folgt:

cat /tmp/test1.txt
1
2
3
4
5
8
9

und

cat /tmp/test2.txt
1
1.5
2
4
5
6
7

Vergleichen Sie nun Seite an Seite

diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7

Sie können den zu verwendenden Alias ​​definieren

alias diff='diff --width=$COLUMNS --suppress-common-lines --side-by-side --color=always'

Dann neues Diff-Ergebnis:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
ahmet
quelle