web-dev-qa-db-fra.com

Diff signale la différence mais les deux lignes sont identiques

Je diff-ed 2 fichiers et ai

1c1
< 1
---
> 1

Les deux fichiers ne contenaient que "1". En quoi est-ce différent?

55
Jiew Meng

1ère ligne: asignifie ajouté, dpour supprimé et cpour changé. Les numéros de ligne du fichier d'origine apparaissent avant ces lettres et ceux du fichier modifié apparaissent après la lettre.

2ème ligne: la ligne avec < provient du fichier 1 et est différente du fichier 2.

3ème ligne est un diviseur.

4ème ligne: la ligne avec > provient du fichier 2 et est différente du fichier 1.

(Si vous voyez jamais =, cela signifie que les lignes sont les mêmes dans les deux fichiers)

Et votre problème peut être dû à des espaces ou à des caractères non lisibles par l'homme: ceux-ci déclenchent également une différence.

Il y a quelques options pour manipuler la sortie.

Exemple:

 rinzwind @ discworld: ~ $ plus 1 
 test 
 test2 
 test3 
 rinzwind @ discworld: ~ $ plus 2 
 test 
 test2 
 test3

format contextualisé:

 rinzwind @ discworld: ~ $ 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 

UNE "!" représente un changement entre les lignes qui correspondent dans les deux fichiers. Un "+" représente l'ajout d'une ligne, tandis qu'un espace vide représente une ligne inchangée. Au début du patch figurent les informations sur le fichier, y compris le chemin d'accès complet et un horodatage. Au début de chaque bloc, figurent les numéros de ligne correspondant à la modification correspondante dans les fichiers. Une plage de nombres apparaissant entre des ensembles de trois astérisques s'applique au fichier d'origine, tandis que des ensembles de trois tirets s'appliquent au nouveau fichier. Les plages de blocs spécifient les numéros de ligne de début et de fin dans le fichier respectif.

Développer le commentaire de Lekensteyn sur le format unifié:

 rinzwind @ discworld: ~ $ 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 

Le format commence par le même en-tête de deux lignes que le format de contexte, sauf que le fichier d'origine est précédé de "---" et le nouveau fichier de "+++". Ensuite, un ou plusieurs éléments de modification contenant les différences de ligne dans le fichier. Les lignes contextuelles inchangées sont précédées d'un caractère d'espacement, les lignes d'addition sont précédées d'un signe plus et les lignes de suppression sont précédées d'un signe moins.

Quelques options utiles:

-b Ignorer les changements dans la quantité d'espace blanc.

-w Ignore tous les espaces.

-B Ignore toutes les lignes vides.

-y sortie en 2 colonnes.

68
Rinzwind

Je trouve que od (octal dump) est pratique pour comparer des fichiers avec des caractères non imprimables (en particulier, les fichiers dont les différences sont "binaires" et qui indiquent donc uniquement qu'ils diffèrent).

Dans l'exemple ci-dessous, je crée une paire de fichiers pouvant ressembler à ceux d'origine, puis effectue un diff avec la sortie d'origine. Ensuite, je diff sur un couple de différentes "od" sorties.

$ 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
6
Charles Boling

j'ai eu le même problème et j'ai trouvé une solution qui pourrait aider, utilisez la commande:

dos2unix <file1> <file2>

l'un d'eux peut être au format DOS/Windows et l'autre au format UNIX

après que j'ai fait cela, le diff était tout bon!

1
levk

http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html#Detailed-Unified

Le lien ci-dessus fournit une description plus concise et claire.

0
Akshar Patel

Vous ne savez pas si cela vous aide avec la difficulté de trouver des caractères d'espaces, mais c'est pratique pour les différences: http://www.gnu.org/software/wdiff/

0
David Winiecki