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

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

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.


29
diff -y --suppress-common-lines file1 file2

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.


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.


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



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.



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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.