J'ai file1.txt
this is the original text
line2
line3
line4
happy hacking !
et file2.txt
this is the original text
line2
line4
happy hacking !
GNU is not UNIX
si je fais: diff file1.txt file2.txt
Je reçois:
3d2
< line3
5a5
> GNU is not UNIX
Comment la sortie est-elle généralement interprétée? Je pense que <
signifie supprimé mais qu'est-ce que 3d2
ou 5a5
signifier?
Si je fais:
$ diff -u file1.txt file2.txt
--- file1.txt 2013-07-06 17:44:59.180000000 +0200
+++ file2.txt 2013-07-06 17:39:53.433000000 +0200
@@ -1,5 +1,5 @@
this is the original text
line2
-line3
line4
happy hacking !
+GNU is not UNIX
Les résultats sont plus clairs, mais qu'est-ce que @@ -1,5 +1,5 @@
signifier?
Dans votre première sortie diff
(appelée "diff normall"), la signification est la suivante
<
- indique les lignes dans file1.txt
>
- indique les lignes du fichier2.txt
3d2
Et 5a5
Indiquent les numéros de ligne affectés et les actions qui ont été effectuées. d
signifie suppression, a
signifie ajout (et c
signifie modification). le nombre à gauche du caractère est le numéro de ligne dans file1.txt, le nombre à droite est le numéro de ligne dans file2.txt. Donc 3d2
Vous indique que la 3ème ligne dans file1.txt a été supprimée et a le numéro de ligne 2 dans file2.txt (ou mieux pour dire qu'après la suppression le compteur de lignes est revenu à la ligne numéro 2). 5a5
Vous indique que nous avons commencé à partir de la ligne numéro 5 dans file1.txt (qui était en fait vide après avoir supprimé une ligne dans l'action précédente), ajouté la ligne et cette ligne ajoutée est le numéro 5 dans file2.txt .
La sortie de la commande diff -u
Est formatée un peu différemment (ce qu'on appelle le format "diff unifié"). Ici diff
nous montre une seule partie du texte, au lieu de deux textes séparés. Dans la ligne @@ -1,5 +1,5 @@
, La partie -1,5
Se rapporte à file1.txt et la partie +1,5
À file2.txt. Ils nous disent que diff
affichera un morceau de texte de 5 lignes à partir de la ligne numéro 1 dans file1.txt. Et la même chose pour le fichier2.txt - diff
nous montre 5 lignes à partir de la ligne 1.
Comme je l'ai déjà dit, les lignes des deux fichiers sont affichées ensemble
this is the original text
line2
-line3
line4
happy hacking !
+GNU is not UNIX
Ici -
Désigne les lignes qui ont été supprimées de file1.txt et +
Désigne les lignes qui ont été ajoutées.
Résumé:
Donné un diff file1 file2
, <
signifie que la ligne manque dans file2
et >
signifie que la ligne manque dans file1
. Le 3d2
et 5a5
peut être ignoré, ce sont des commandes pour patch
qui sont souvent utilisées avec diff
.
Réponse complète:
De nombreux utilitaires * nix proposent des manuels TeXinfo ainsi que des pages man
plus simples. vous pouvez y accéder en exécutant info command
, par exemple info diff
. Dans ce cas, la section qui vous intéresse est:
2.4.2 Description détaillée du format normal
Le format de sortie normal consiste en un ou plusieurs morceaux de différences; chaque morceau montre une zone où les fichiers diffèrent. Les mecs au format normal ressemblent à ceci:
CHANGE-COMMAND
< FROM-FILE-LINE
< FROM-FILE-LINE...
---
> TO-FILE-LINE
> TO-FILE-LINE...
Il existe trois types de commandes de modification. Chacun se compose d'un numéro de ligne ou d'une plage de lignes séparées par des virgules dans le premier fichier, d'un caractère unique indiquant le type de modification à effectuer et d'un numéro de ligne ou d'une plage de lignes séparées par des virgules dans le second fichier. Tous les numéros de ligne sont les numéros de ligne d'origine de chaque fichier. Les types de commandes de modification sont les suivants:
`LaR'
Add the lines in range R of the second file after line L of the
first file. For example, `8a12,15' means append lines 12-15 of
file 2 after line 8 of file 1; or, if changing file 2 into file 1,
delete lines 12-15 of file 2.
`FcT'
Replace the lines in range F of the first file with lines in range
T of the second file. This is like a combined add and delete, but
more compact. For example, `5,7c8,10' means change lines 5-7 of
file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.
`RdL'
Delete the lines in range R from the first file; line L is where
they would have appeared in the second file had they not been
Je suggère d'utiliser:
diff -rupP file1.txt file2.txt > result.patch
Ensuite, lorsque vous lisez result.patch
, vous saurez instantanément la différence.
Ce sont les significations des commutateurs de ligne de commande:
- r: récursif
-: affiche le numéro de ligne
- p (petit): montre les différences dans les fonctions C
- P (majuscule): en cas de fichiers multiples, le chemin complet est affiché
Les réponses ci-dessus sont bonnes. Cependant en tant que débutant, je les ai trouvés un peu difficiles à comprendre et en cherchant plus loin, j'ai trouvé un lien très utile: Linux Diff Command & Examples
Le site explique le concept d'une manière simple et facile à comprendre.
La commande diff est plus facile à comprendre si vous la considérez de cette façon:
Essentiellement, il génère un ensemble d'instructions sur la façon de modifier un fichier pour le rendre identique au deuxième fichier.
Chacun des cas suivants est bien expliqué:
a pour ajouter, c pour changer, d pour supprimer
diff <file-to-edit> <file-with-updates> #Rather than diff f1 f2
Les résultats opèrent sur le fichier à éditer (fichier1), en lui appliquant diverses mises à jour.
Similitude, je trouve ces renommages utiles pour conceptualiser les résultats:
2,4d1 --- D (s) -d - N --- d elete ('remove') D line (s) . Synchronisez ensuite à la ligne N dans les deux.
4a2,4 --- N -a - U (s) --- À la ligne N, a dd ('insérer') mises à jour ligne (s) U
Remarque: ils sont presque symétriques.
2,4c5,6 --- R (s) -c - U (s) --- Supprimer R(s) lignes, puis insérer les lignes mises à jour = U(s) à leur place.
4a2,4 --- à partir de 4, ajoutez (insérez) les lignes mises à jour 2-4 (c'est-à-dire 2,4 signifie 2, 3 et 4)
2,4d1 --- supprimez les lignes 2-4.
2,4c5,6 --- supprimer les lignes 2-4 et insérer les lignes 5-6 mises à jour
Je sais que ce sont des commandes de l'éditeur de flux et conçues pour être traitées par une machine. Par exemple, c'est vraiment la commande ed ajouter, pas insérer, mais il est plus utile pour moi de penser à insérer qui est ce qui est finalement fait dans le fichier. Ils utilisent des opérations de flux, mais j'aime penser en termes de résultats.