J'ai fait la différence entre deux fichiers et j'ai obtenu
1c1
< 1
---
> 1
Les deux fichiers ne contenaient que "1". En quoi est-ce différent ?
J'ai fait la différence entre deux fichiers et j'ai obtenu
1c1
< 1
---
> 1
Les deux fichiers ne contenaient que "1". En quoi est-ce différent ?
1ère ligne : a
signifie "ajouté", d
pour supprimer et c
pour avoir changé. Les numéros de ligne du fichier original apparaissent avant ces lettres et ceux du fichier modifié apparaissent après la lettre.
2ème ligne : ligne avec <
sont issus du fichier 1 et sont différents du fichier 2.
La troisième ligne est un séparateur.
4ème ligne : ligne avec >
sont issus du fichier 2 et sont différents du fichier 1.
(Si vous avez déjà vu =
cela signifie que les lignes sont les mêmes dans les deux fichiers)
Et votre problème peut être dû à des espaces blancs ou à d'autres caractères non lisibles par l'homme : ceux-ci font également la différence.
Il existe quelques options pour manipuler la sortie.
Exemple :
rinzwind@discworld:~$ more 1
test
test2
test3
rinzwind@discworld:~$ more 2
test
test2
test3
format contextuel :
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
Un " !" 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 les ensembles de trois tirets s'appliquent au nouveau fichier. Les fourchettes de chiffres spécifient les numéros de ligne de début et de fin dans le fichier respectif.
Développant 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 contextuel, sauf que le fichier original est précédé de "---" et le nouveau fichier de "+++". Suivent une ou plusieurs cases de changement qui contiennent les différences de ligne dans le fichier. Les lignes inchangées et contextuelles sont précédées d'un espace, les lignes d'ajout 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
Ne tenez pas compte des changements dans la quantité d'espace blanc.
-w
Ignorez tous les espaces blancs.
-B
Ignorez toutes les lignes vides.
-y
dans 2 colonnes.
Je trouve od (dump octal) pour être pratique lors de la comparaison de fichiers avec des caractères non imprimables (en particulier les fichiers que diff décide d'être "binaire" et donc vous dit seulement qu'ils sont différents).
Dans l'exemple ci-dessous, je crée une paire de fichiers qui pourraient ressembler aux fichiers originaux, puis je fais un diff avec la sortie originale ; ensuite, je fais un diff sur deux sorties "od" différentes.
$ 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
Je ne suis pas sûr que cela soit utile pour les caractères d'espacement difficiles à trouver, mais c'est pratique pour la comparaison : http://www.gnu.org/software/wdiff/
http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html#Detailed-Unified
Le lien ci-dessus fournit une description plus concise et plus claire.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.