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

54

J'ai différé 2 fichiers et obtenu

1c1
< 1
---
> 1

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

    
posée Jiew Meng 13.08.2011 - 17:03
la source

5 réponses

67

1ère ligne: a signifie ajouté, d pour supprimé et c pour modifié. Les numéros de ligne du fichier d'origine apparaissent avant que ces lettres et celles du fichier modifié n'apparaissent après la lettre.

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

La 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 = , cela signifie que les lignes sont les mêmes dans les deux fichiers)

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

Il existe certaines options pour manipuler les sorties.

Exemple:

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

format contextuel:

[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

A "!" 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 se trouvent les informations sur le fichier, y compris le chemin d'accès complet et un horodatage. Au début de chaque morceau se trouvent les numéros de ligne qui s'appliquent à la modification correspondante dans les fichiers. Une plage de numéros apparaissant entre des ensembles de trois astérisques s'applique au fichier d'origine, tandis que des jeux de trois tirets s'appliquent au nouveau fichier. Les plages de tronçon spécifient les numéros de ligne de début et de fin dans le fichier respectif.

Développement du commentaire de Lekensteyn sur le format unifié:

[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

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 que le nouveau fichier est précédé de "+++". Vous trouverez ci-après un ou plusieurs hunks de modification contenant les différences de lignes 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 Ignore les modifications de la quantité d'espace blanc.

-w Ignore tous les espaces blancs.

-B Ignore toutes les lignes vides.

-y de sortie en 2 colonnes.

    
réponse donnée Rinzwind 13.08.2011 - 17:13
la source
6

Je trouve od (octal dump) très pratique lorsque vous comparez des fichiers avec des caractères non imprimables (en particulier les fichiers dont diff décide qu'ils sont "binaires" et vous indiquent donc uniquement qu'ils diffèrent).

Dans l'exemple ci-dessous, je crée une paire de fichiers qui pourraient ressembler à ceux d'origine, puis effectuez un diff avec la sortie d'origine; Ensuite, je fais de la diff sur quelques sorties "od" différentes.

$ echo 1 & gt; 1
$ echo "1" & gt; 2
$ diff 1 2

1c1  
< 1  
- ---  
> 1   

$ od -c 1 & gt; 1.od
   $ od -c 2 & gt; 2.od
   $ diff 1.od 2.od

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

$ od -Ax -c -t x1 1 & gt; 1.od
   $ od -Ax -c -t x1 2 & gt; 2.od
   $ diff 1.od 2.od

1,3c1,3
< 000000   1  \n
<         31  0a
< 000002
---
> 000000   1      \n
>         31  20  0a
> 000003
    
réponse donnée Charles Boling 14.01.2014 - 21:36
la source
1

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 avoir fait cela, le diff était bien!

    
réponse donnée levk 03.09.2013 - 14:43
la source
0

Vous ne savez pas si cela peut vous aider à trouver des caractères d’espace, mais c’est pratique pour la diffraction: lien

    
réponse donnée David Winiecki 25.10.2013 - 19:15
la source
0

lien

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

    
réponse donnée Akshar Patel 23.03.2017 - 13:36
la source

Lire d'autres questions sur les étiquettes