GNU/Linux >> Tutoriels Linux >  >> Linux

Comment effectuer une comparaison ligne par ligne de fichiers sous Linux à l'aide de la commande diff

Si vous êtes un utilisateur Linux et que votre travail implique de travailler sur diverses distributions Linux, il peut arriver que vous vous retrouviez à taper des commandes sur un système Linux sans interface graphique. Cela signifie que vous ne pourrez plus accéder à vos applications graphiques préférées (par exemple, Gedit pour l'édition de fichiers) que vous utilisez habituellement pour votre travail habituel.

Que vous soyez administrateur système ou développeur, la comparaison de fichiers est une tâche commune à presque tout le monde. Que se passe-t-il si vous avez besoin de comparer deux fichiers tout en travaillant sur un système Linux en CLI uniquement ? Votre outil de comparaison basé sur l'interface graphique préféré ne sera évidemment pas à votre disposition. Inutile de dire que vous devrez vous contenter d'un utilitaire de ligne de commande pour faire votre travail.

Sous Linux, la commande diff peut être utilisée pour comparer deux fichiers, mais le fait est qu'il y a une légère courbe d'apprentissage impliquée avec cet utilitaire. Si vous ne savez pas comment fonctionne diff et que vous recherchez un didacticiel rapide pour commencer, ne cherchez pas plus loin, car dans cet article, nous discuterons des bases de cette commande avec quelques exemples faciles à comprendre.

Avant de continuer, gardez à l'esprit que tous les exemples de ce didacticiel ont été testés sur Ubuntu 14.04 avec Bash version 4.3.11(1) et diff version 3.3.

 

Commande Diff Linux

Au lieu de passer directement aux exemples, il est bon de connaître d'abord la commande. La page de manuel de la commande diff révèle que l'outil compare les fichiers ligne par ligne. Sa syntaxe est :

diff [OPTION]... FICHIERS

Pendant que [OPTION] représente les différentes options de ligne de commande offertes par l'outil, FILES est généralement un couple de noms de fichiers. Bien que la page de manuel diff contienne des informations utiles sur la commande, la documentation complète de diff est conservée sous la forme d'un manuel Texinfo. Si les infos et diff programmes sont correctement installés sur votre site, la commande

différence d'informations

devrait vous donner accès au manuel complet.

Utilisation différente/Exemples

Voyons maintenant comment diff est utilisé. Pour cela, commençons par un exemple basique. Supposons que les deux fichiers suivants soient les deux fichiers que nous voulons comparer :

fichier1 :

test
test2
test3

fichier2 :

test
test23
test3

Voici comment vous pouvez utiliser la commande diff pour comparer ces deux fichiers :

diff fichier1 fichier2

Et voici le résultat produit par la commande ci-dessus :

2c2
---
> test23

La sortie semble cryptique, non ? Nous y reviendrons dans un instant. Commençons par comprendre la structure de base de la sortie que diff produit en général.

La première chose à garder à l'esprit est que la sortie représente les modifications nécessaires pour transformer le fichier1 (généralement le fichier d'origine) en fichier2 (le fichier nouveau ou modifié). La sortie se compose généralement de lignes commençant par un nombre (ou une plage) suivi d'un alphabet (a, d ou c) et d'un autre nombre (ou plage). Par exemple 2c2 (à partir de la sortie ci-dessus).

Le premier nombre représente la ligne (ou la plage de lignes) du fichier1 (fichier d'origine), tandis que le dernier nombre représente la ligne (ou la plage de lignes) du fichier2 (le nouveau fichier). Quant à l'alphabet intermédiaire, a représente ajouté , d est pour supprimé, et c représente modifié .

Ainsi, 2c2 signifie que la deuxième ligne du fichier d'origine a changé et doit être remplacée par la deuxième ligne du nouveau fichier afin de rendre les fichiers identiques. Si vous comparez manuellement les deux fichiers (fichier1 et fichier2), vous verrez que c'est exactement le cas.

Quant aux trois lignes qui suivent 2c2 dans l'exemple ci-dessus, celle qui commence par '<' n'est rien d'autre que la deuxième ligne du fichier1, et celle qui commence par '>' n'est rien d'autre que la ligne en question du fichier 2. Les trois traits d'union entre eux (---) ne servent qu'à des fins de séparation.

Est-il nécessaire de revoir la sortie du premier exemple maintenant ? Probablement pas car l'explication ci-dessus aurait dû la rendre explicite. Maintenant, prenons un autre exemple.

Donc, voici le fichier 1 :

Bonjour à tous,
Ceci est un tutoriel sur les commandes diff
de HowtoForge.
J'espère que vous en tirerez profit.
Merci.

Voici le fichier 2 :

Bonjour à tous,
Bienvenue sur HowtoForge.
Dans ce didacticiel, nous aborderons l'outil de comparaison.
J'espère que vous le trouverez utile.
Merci.

Voici la commande (qui reste la même) :

diff fichier1 fichier2

Et voici le résultat :

2,4c2,4
---
> Bienvenue sur HowtoForge.
> Dans ce didacticiel, nous aborderons l'outil diff.
> J'espère que vous le trouverez utile.

Vous pouvez donc voir que dans ce cas, la sortie principale - 2,4c2,4 - se compose de plusieurs chiffres avant et après l'alphabet. Ce sont essentiellement des plages - 2,4 représente les numéros de ligne 2,3 et 4. Ainsi, la sortie signifie que les numéros de ligne 2 à 4 dans le fichier d'origine (fichier1) ont changé et doivent être remplacés par les numéros de ligne 2 à 4 de file2 afin de rendre les fichiers identiques.

Passons à autre chose, modifions un peu le contenu des fichiers. Alors que le fichier1 reste le même, le fichier2 devient désormais :

Bienvenue sur HowtoForge.
Dans ce didacticiel, nous aborderons l'outil de comparaison.
J'espère que vous le trouverez utile.
Merci.

Ceci est un tutoriel de commande diff
de HowtoForge.
J'espère que vous en tirerez profit.
Merci.

Maintenant, si vous exécutez la commande diff, la sortie suivante sera produite :

0a1,5
> Bienvenue sur HowtoForge.
> Dans ce didacticiel, nous aborderons l'outil de comparaison.
> J'espère que vous le trouverez utile.
> Merci.
>

Ainsi, vous pouvez voir que l'outil a immédiatement reconnu que le deuxième paragraphe du fichier2 n'est rien d'autre que ce que contient tout le fichier1. Ainsi, la sortie indique que les lignes 1 à 5 du fichier2 doivent être ajoutées au début du fichier1 pour que les deux fichiers soient identiques.

Et si vous supprimez la dernière ligne ("Merci") du fichier 2, voici le résultat :

0a1,5
> Bienvenue sur HowtoForge.
> Dans ce didacticiel, nous aborderons l'outil de comparaison.
> J'espère que vous le trouverez utile.
> Merci.
>
4d8

Vous pouvez voir que la sortie contient désormais également 4d8,  ce qui signifie que la quatrième ligne du fichier1 doit être supprimée afin de synchroniser les deux fichiers à partir de la ligne numéro 8. Bien sûr, c'est après avoir corrigé le changement 0a1,5 mentionné en premier.

Conclusion

D'accord, la sortie de la commande diff n'est pas facile à comprendre, mais la courbe d'apprentissage n'est pas si raide. Passez quelques heures avec l'outil et vous vous sentirez sûrement à l'aise avec. En ce qui concerne le didacticiel, nous venons de gratter la surface ici. Jetez un œil à la page de manuel de la commande et vous vous rendrez compte qu'il y a beaucoup plus à apprendre sur diff, ce que nous ferons dans la prochaine partie de cette série de didacticiels.


Linux
  1. Comment redémarrer Linux en utilisant la ligne de commande

  2. Comment compresser et extraire des fichiers à l'aide de la commande tar sous Linux ?

  3. Comment tuer un processus sous Linux en utilisant la commande ?

  4. Comment trier des fichiers sous Linux à l'aide de la commande Sort

  5. Comment créer des fichiers fragmentés sous Linux à l'aide de la commande "dd"

Comment renommer des fichiers en utilisant la ligne de commande sous Linux

Comment comparer des fichiers sous Linux à l'aide de l'outil Meld (Diff/Merge)

Comment copier des fichiers sous Linux à l'aide de la commande CP

Comment compter les fichiers dans le répertoire sous Linux

Utilisation de la commande Diff pour comparer deux fichiers dans un terminal Linux

Comment télécharger des fichiers dans Rocky Linux 8 sur la ligne de commande à l'aide de wget