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

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

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.


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

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.


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.


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



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.



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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.