A diferença difere os relatórios, mas as duas linhas são as mesmas

54

Eu fiz 2 arquivos e obtive

1c1
< 1
---
> 1

Ambos os arquivos continham apenas "1". Como isso é diferente?

    
por Jiew Meng 13.08.2011 / 17:03

5 respostas

67

1a linha: a significa adicionado, d para excluído e c para alterado. Os números de linha do arquivo original aparecem antes dessas letras e as do arquivo modificado aparecem após a letra.

2a linha: a linha com < é do arquivo 1 e é diferente do arquivo 2.

3ª linha é um divisor.

4a linha: a linha com > é do arquivo 2 e é diferente do arquivo 1.

(Se você já viu = , significa que as linhas são as mesmas em ambos os arquivos)

E o seu problema pode ser espaços em branco ou outros caracteres legíveis não humanos: esses também desencadeiam uma diferença.

Existem algumas opções para manipular a saída.

Exemplo:

[email protected]:~$ more 1 
test
test2
test3
[email protected]:~$ more 2
test
test2  
test3

formato contextualizado:

[email protected]:~$ diff -c  1 2
*** 1   2011-08-13 17:05:40.433966684 +0200
--- 2   2011-08-13 17:11:24.369966629 +0200
***************
*** 1,3 ****
  test
! test2
  test3
--- 1,3 ----
  test
! test2  
  test3

Um "!" representa uma mudança entre linhas que correspondem nos dois arquivos. Um "+" representa a adição de uma linha, enquanto um espaço em branco representa uma linha inalterada. No início do patch é a informação do arquivo, incluindo o caminho completo e um carimbo de hora. No início de cada grupo, os números de linha que se aplicam à alteração correspondente nos arquivos. Um intervalo de números que aparece entre conjuntos de três asteriscos se aplica ao arquivo original, enquanto conjuntos de três traços se aplicam ao novo arquivo. Os intervalos do grupo especificam os números de linha inicial e final no respectivo arquivo.

Expandindo o comentário de Lekensteyn sobre o formato unificado:

[email protected]:~$ diff -u  1 2
--- 1   2011-08-13 17:05:40.433966684 +0200
+++ 2   2011-08-13 17:11:24.369966629 +0200
@@ -1,3 +1,3 @@
 test
-test2
+test2  
 test3

O formato começa com o mesmo cabeçalho de duas linhas do formato de contexto, exceto que o arquivo original é precedido por "---" e o novo arquivo é precedido por "+++". A seguir, um ou mais pedaços de alteração que contêm as diferenças de linha no arquivo. As linhas contextuais inalteradas são precedidas por um caractere de espaço, as linhas de adição são precedidas por um sinal de mais e as linhas de exclusão são precedidas por um sinal de menos.

Algumas opções úteis:

-b Ignore alterações na quantidade de espaço em branco.

-w Ignora todo o espaço em branco.

-B Ignora todas as linhas em branco.

-y output em 2 colunas.

    
por Rinzwind 13.08.2011 / 17:13
6

Acho od (octal dump) útil quando comparando arquivos com caracteres não-imprimíveis (particularmente arquivos que diff decide serem "binários" e assim diz apenas que eles diferem).

No exemplo abaixo, eu crio um par de arquivos que poderiam ser como os originais, então faça um diff com a saída original; Em seguida, faço um diff em algumas saídas "od" diferentes.

$ echo 1 > 1
$ echo "1" > 2
$ diff 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1 > 1.od
   $ od -c 2 > 2.od
   $ diff 1.od 2.od

1,2c1,2
< 0000000   1  \n
< 0000002
---
> 0000000   1      \n
> 0000003

$ od -Ax -c -t x1 1 > 1.od
   $ od -Ax -c -t x1 2 > 2.od
   $ diff 1.od 2.od

1,3c1,3
< 000000   1  \n
<         31  0a
< 000002
---
> 000000   1      \n
>         31  20  0a
> 000003
    
por Charles Boling 14.01.2014 / 21:36
1

eu tive o mesmo problema e encontrei uma solução que pode ajudar use o comando:

% bl0ck_qu0te%

um deles pode estar em formato dos / windows e o outro em formato UNIX

depois que eu fiz isso o diff foi tudo de bom!

    
por levk 03.09.2013 / 14:43
0

Não tenho certeza se isso ajuda a encontrar caracteres em branco, mas é útil para o diff: link

    
por David Winiecki 25.10.2013 / 19:15
0

link

O link acima fornece uma descrição mais concisa e clara.

    
por Akshar Patel 23.03.2017 / 13:36

Tags