resultados lado a lado do diff do Unix?

106

Como posso plotar os resultados de um comando diff unix lado a lado em vez de uma diferença após a outra? Veja abaixo um exemplo:

    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

Eu gostaria de ter algo como:

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
fonte
O vimdiff também pode ajudar. Boa sorte.
shellter

Respostas:

168

De man diff, você pode usar -ypara fazer lado a lado.

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

Portanto, diga:

diff -y /tmp/test1  /tmp/test2

Teste

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

Vamos compará-los:

$ diff -y a b
hello                                                           hello
my name                                                         my name
is me                                                         | is you
fedorqui 'então pare de prejudicar'
fonte
39
Observe que difftem uma largura máxima de saída codificada (130 colunas). Adicione a opção diff --width=$COLUMNSpara definir isso para a largura do seu terminal.
ntc2
6
Além disso, para grandes diferenças, basta inserir em menos como este para obter um bom diff scrolly / pesquisável:diff -y /tmp/test1 /tmp/test2 | less
willbradley
confira colordiff
Vladislavs Dovgalecs
5
melhordiff --width=$COLUMNS --suppress-common-lines --side-by-side a b
rubo77
@ rubo77 Dependendo de como você configurou a expansão da guia, você também pode querer expandir as guias em espaços para que a saída se diff --expand-tabs --width=$COLUMNS --suppress-common-lines --side-by-side a b
alinhe
40

Da página inicial do icdiff :

insira a descrição da imagem aqui

Seu terminal pode exibir cores, mas a maioria das ferramentas diff não faz bom uso delas. Ao destacar as alterações, o icdiff pode mostrar as diferenças entre arquivos semelhantes sem atrapalhar. Isso é especialmente útil para identificar e compreender pequenas mudanças nas linhas existentes.

Em vez de tentar ser um substituto do diff para todas as circunstâncias, o objetivo do icdiff é ser uma ferramenta que você pode usar para obter uma imagem melhor do que mudou quando não é imediatamente óbvio do diff.

IMHO, sua saída é muito mais legível do que diff -y.

timmfin
fonte
29
diff -y --suppress-common-lines file1 file2
Rjazhenka
fonte
3
esta deve ser a resposta aceita porque apenas -ymostra também linhas comuns que não são o mesmo que diffa pergunta original. +1.
hélice de
melhordiff -W $COLUMNS --suppress-common-lines -y file1 file2
rubo77
13

Você pode usar:

sdiff  file1 file2

ou

diff -y file1 file2

ou

vimdiff file1 file2

para exibição lado a lado.

srpatch
fonte
2
Eu queria saber qual é a diferença entre diff -ye sdiff? A produção deles parece idêntica a mim.
Hux
11

Você deve ter sdiffpara mesclar lado a lado as diferenças de arquivo. Leia man sdiffpara a história completa.

Chris Seymour
fonte
2
No meu sistema (GNU / Linx) sdiffparece fazer a mesma coisa que diff -ye a sdiffdocumentação informativa diz que está obsoleto: "'sdiff' sem '--output' ('-o') produz uma diferença lado a lado. Este uso é obsoleto; em vez disso, use a opção '--side-by-side' ('-y') de 'diff'. "
ntc2
7

Você pode simplesmente usar:

diff -y fileA.txt fileB.txt | colordiff

Mostra a saída dividida em duas colunas e colorida! ( colordiff)

Jorge Fernando Matricali
fonte
1
Apenas experimentei no OSX e não funciona aqui. Talvez seja apenas para Linux.
Nikola Petkanski
colordiff não está no osx.
terry franguiadakis
Você pode instalar o colordiff no OSX usando Homebrew. brew install colordiff Veja a fórmula colordiff
Jorge Fernando Matricali
6

Use a -yopção:

diff -y file1 file2
retummelancolique
fonte
6

Tente cdiff - Veja diferenças incrementais coloridas na área de trabalho ou de stdin com suporte lado a lado e de pager automático.

ymattw
fonte
5

Você pode usar vimdiff .

Exemplo:

vimdiff file1 file2
Eduardo cuomo
fonte
4

Se os seus arquivos tiverem uso inconsistente de espaços e tabulações, pode ser útil incluir o -targumento para expandir as tabulações:

diff -ty file1 file2
Balde
fonte
1

Comando diff aprimorado com cor, lado a lado e alias

Digamos que o conteúdo do arquivo seja como:

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

e

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

Agora comparando lado a lado

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

Você pode definir um alias para usar

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

Em seguida, novo resultado de diferença:

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