risultati unix diff side-to-side?


106

Come posso tracciare i risultati di un comando diff unix da lato a lato invece di una differenza dopo l'altra? Vedi sotto per un esempio:

    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

Mi piacerebbe avere qualcosa come:

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

Anche vimdiff può aiutare. In bocca al lupo.
bombardamento

Risposte:


168

Da man diff, puoi usare -yper fare fianco a fianco.

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

Quindi, dì:

diff -y /tmp/test1  /tmp/test2

Test

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

Confrontiamoli:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you

39
Si noti che diffha una larghezza di output massima hardcoded (130 colonne). Aggiungi l'opzione diff --width=$COLUMNSper impostarlo sulla larghezza del tuo terminale.
ntc2

6
Anche per diff di grandi dimensioni basta inserire meno come questo per un bel diff scrolly / ricercabile:diff -y /tmp/test1 /tmp/test2 | less
willbradley

controlla colordiff
Vladislavs Dovgalecs

5
megliodiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77

@ rubo77 A seconda di come hai impostato l'espansione delle tabulazioni, potresti anche voler espandere le tabulazioni negli spazi in modo che l'output sia diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
allineato

40

Dalla homepage di icdiff :

inserisci qui la descrizione dell'immagine

Il tuo terminale può visualizzare il colore, ma la maggior parte degli strumenti diff non ne fa un buon uso. Evidenziando le modifiche, icdiff può mostrarti le differenze tra file simili senza intralciarti. Ciò è particolarmente utile per identificare e comprendere piccoli cambiamenti all'interno delle linee esistenti.

Invece di cercare di essere un sostituto del diff per tutte le circostanze, l'obiettivo di icdiff è quello di essere uno strumento che puoi raggiungere per ottenere un'immagine migliore di ciò che è cambiato quando non è immediatamente ovvio da diff.

IMHO, il suo output è molto più leggibile di diff -y.


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

3
questa dovrebbe essere la risposta accettata perché -ymostra anche delle linee comuni che non è la stessa diffdella domanda giusta e originale. +1.
elica

megliodiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77

13

Puoi usare:

sdiff  file1 file2

o

diff -y file1 file2

o

vimdiff file1 file2

per visualizzazione affiancata.


2
Mi chiedevo qual è la differenza tra diff -ye sdiff? Il loro output mi sembra identico.
Hux

11

Dovresti avere sdiffper l'unione fianco a fianco delle differenze di file. Leggi man sdiffper la storia completa.


2
Sul mio sistema (GNU / Linx) sdiffsembra fare la stessa cosa diff -ye la sdiffdocumentazione informativa dice che è deprecato: "'sdiff' senza '--output' ('-o') produce una differenza affiancata. Questo utilizzo è obsoleto; usa invece l'opzione '--side-by-side' ('-y') di 'diff'. "
ntc2



6

Prova cdiff - Visualizza differenze colorate e incrementali nell'area di lavoro o da stdin con supporto affiancato e auto pager.



4

Se i tuoi file hanno un uso incoerente di spazi e tabulazioni, potresti trovare utile includere l' -targomento per espandere le tabulazioni:

diff -ty file1 file2

1

Comando diff migliorato con colore, fianco a fianco e alias

Diciamo che il contenuto del file è come:

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

e

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

Ora confrontando fianco a fianco

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

È possibile definire l'alias da utilizzare

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

Quindi nuovo risultato diff:

diff /tmp/test1.txt /tmp/test2.txt
                                                                              > 1.5
3                                                                             <
8                                                                             | 6
9                                                                             | 7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.