Je diff-ed 2 fichiers et ai
1c1
< 1
---
> 1
Les deux fichiers ne contenaient que "1". En quoi est-ce différent?
1ère ligne: a
signifie ajouté, d
pour supprimé et c
pour 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.
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
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!
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.
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/