Comment comparer deux fichiers texte dans le terminal Linux

Besoin de voir les différences entre deux révisions d’un fichier texte? Puis diff est la commande dont vous avez besoin. Ce tutoriel vous montre comment utiliser diff sur Linux et macOS, en toute simplicité.

Plonger dans les diff

Le diff La commande compare deux fichiers et produit une liste des différences entre les deux. Pour être plus précis, il produit une liste des modifications qui devraient être apportées au premier fichier, pour qu’il corresponde au second fichier. Si vous gardez cela à l’esprit, vous comprendrez plus facilement la sortie de diff. Le diff a été conçue pour trouver les différences entre les fichiers de code source et pour produire une sortie qui pourrait être lue et utilisée par d’autres programmes, tels que le pièce commander. Dans ce didacticiel, nous allons examiner les façons les plus utiles d’utiliser diff.

Plongeons-nous et analysons deux fichiers. L’ordre des fichiers sur la ligne de commande détermine quel fichier diff considère comme le «premier fichier» et qu’il considère comme le «deuxième fichier». Dans l’exemple ci-dessous, alpha1 est le premier fichier et alpha2 est le deuxième fichier. Les deux fichiers contiennent le alphabet phonétique mais le deuxième fichier, alpha2, a subi quelques modifications supplémentaires afin que les deux fichiers ne soient pas identiques.

Nous pouvons comparer les fichiers avec cette commande. Taper diff, un espace, le nom du premier fichier, un espace, le nom du deuxième fichier, puis appuyez sur Entrée.

diff alpha1 alpha2

Sortie de la commande diff sans option

Comment disséquer cette sortie? Une fois que vous savez quoi chercher, ce n’est pas si mal. Chaque différence est répertoriée à son tour dans une seule colonne et chaque différence est étiquetée. L’étiquette contient des nombres de chaque côté d’une lettre, comme 4c4. Le premier numéro est le numéro de ligne en alpha1 et le deuxième numéro est le numéro de ligne en alpha2. La lettre au milieu peut être:

  • c: La ligne du premier fichier doit être modifiée pour correspondre à la ligne du deuxième fichier.
  • : La ligne du premier fichier doit être supprimée pour correspondre au second fichier.
  • une: Du contenu supplémentaire doit être ajouté au premier fichier pour qu’il corresponde au second fichier.

Le 4c4 dans notre exemple, dites-nous que la ligne quatre de alpha1 doit être modifiée pour correspondre à la ligne quatre de alpha2. C’est la première différence entre les deux fichiers qui diff a trouvé.

Lignes commençant par < se référer au premier fichier, dans notre exemple alpha1, et aux lignes commençant par > reportez-vous au deuxième fichier, alpha2. La ligne < Delta nous dit que le mot Delta est le contenu de la ligne quatre de alpha1. La ligne > Dave nous dit que le mot Dave est le contenu de la ligne quatre dans alpha2. Pour résumer, nous devons remplacer Delta par Dave sur la ligne quatre de alpha1, pour que cette ligne corresponde aux deux fichiers.

Le prochain changement est indiqué par le 12c12. En appliquant la même logique, cela nous indique que la ligne 12 de alpha1 contient le mot Lima, mais que la ligne 12 de alpha2 contient le mot Linux.

Le troisième changement fait référence à une ligne qui a été supprimée de alpha2. L’étiquette 21d20 est déchiffré comme « la ligne 21 doit être supprimée du premier fichier pour que les deux fichiers se synchronisent à partir de la ligne 20. » Le < Uniform line nous montre le contenu de la ligne qui doit être supprimée de alpha1.

La quatrième différence est étiquetée 26a26,28. Ce changement fait référence à trois lignes supplémentaires qui ont été ajoutées à alpha2. Noter la 26,28 dans l’étiquette. Les nombres sur deux lignes séparés par une virgule représentent une plage de numéros de ligne. Dans cet exemple, la plage va de la ligne 26 à la ligne 28. Le libellé est interprété comme «à la ligne 26 du premier fichier, ajoutez les lignes 26 à 28 du deuxième fichier». On nous montre les trois lignes de alpha2 qui doivent être ajoutées à alpha1. Ceux-ci contiennent les mots Quirk, Strange et Charm.

En relation :  Comment obtenir la taille d'un fichier ou d'un répertoire sous Linux

Snappy One-Liners

Si vous voulez simplement savoir si deux fichiers sont identiques, utilisez le -s (signaler les fichiers identiques) option.

diff -s alpha1 alpha3

Sortie de la commande diff avec l'option -s

Vous pouvez utiliser le -q (brève) option pour obtenir une déclaration tout aussi concise sur deux fichiers étant différents.

diff -q alpha1 alpha2

Sortie de la commande diff avec l'option -q

Une chose à surveiller est qu’avec deux fichiers identiques, le-q (bref) option clame complètement et ne rapporte rien du tout.

Une vue alternative

Le -y (côte à côte) utilise une disposition différente pour décrire les différences de fichiers. Il est souvent pratique d’utiliser le -W (largeur) avec la vue côte à côte, pour limiter le nombre de colonnes affichées. Cela évite les lignes enveloppantes laides qui rendent la sortie difficile à lire. Ici nous avons dit diff pour produire un affichage côte à côte et pour limiter la sortie à 70 colonnes.

diff -y -W 70 alpha1 alpha2

Sortie de la commande diff avec affichage côte à côte

Le premier fichier de la ligne de commande, alpha1, est affiché à gauche et la deuxième ligne de la ligne de commande, alpha2, est affichée à droite. Les lignes de chaque fichier sont affichées côte à côte. Il y a des caractères indicateurs à côté de ces lignes en alpha2 qui ont été modifiés, supprimés ou ajoutés.

  • |: Une ligne qui a été modifiée dans le deuxième fichier.
  • <: Une ligne qui a été supprimée du deuxième fichier.
  • >: Une ligne qui a été ajoutée au deuxième fichier qui ne se trouve pas dans le premier fichier.

Si vous préférez un résumé côte à côte plus compact des différences de fichiers, utilisez le --suppress-common-lines option. Cela force diff pour lister uniquement les lignes modifiées, ajoutées ou supprimées.

diff -y -W 70 --suppress-common-lines alpha1 alpha2

Sortie de la commande diff avec l'option --suppress-common-lines

Ajoutez une touche de couleur

Un autre utilitaire appelé colordiff ajoute une mise en évidence de couleur au diff production. Cela rend beaucoup plus facile de voir quelles lignes ont des différences.

Utilisation apt-get pour installer ce paquet sur votre système si vous utilisez Ubuntu ou une autre distribution basée sur Debian. Sur les autres distributions Linux, utilisez plutôt l’outil de gestion des packages de votre distribution Linux.

sudo apt-get install colordiff

Utilisation colordiff comme vous utiliseriez diff.

Sortie de la commande colordiff sans options

En réalité, colordiff est un wrapper pour diff, et diff fait tout le travail dans les coulisses. À cause de cela, tous les diff les options fonctionneront avec colordiff.

Sortie de la commande colordiff avec l'option --suppress-common-lines

Fournir un certain contexte

Pour trouver un juste milieu entre l’affichage de toutes les lignes des fichiers à l’écran et la liste des lignes modifiées uniquement, nous pouvons demander diff pour fournir un certain contexte. Il y a deux façons de faire ça. Les deux méthodes ont le même objectif, qui est d’afficher quelques lignes avant et après chaque ligne modifiée. Vous pourrez voir ce qui se passe dans le fichier à l’endroit où la différence a été détectée.

La première méthode utilise le -c (contexte copié).

colordiff -c alpha1 alpha2

Sortie de colordiff avec l'option -c

Le diff la sortie a un en-tête. L’en-tête répertorie les deux noms de fichiers et leurs heures de modification. Il y a des astérisques (*) avant le nom du premier fichier et des tirets (-) avant le nom du deuxième fichier. Des astérisques et des tirets seront utilisés pour indiquer à quel fichier appartiennent les lignes de la sortie.

Une ligne d’astérisques avec 1,7 au milieu indique que nous regardons les lignes de alpha1. Pour être précis, nous examinons les lignes un à sept. Le mot Delta est marqué comme modifié. Il a un point d’exclamation ( ! ) à côté, et il est rouge. Il y a trois lignes de texte inchangé affichées avant et après cette ligne afin que nous puissions voir le contexte de cette ligne dans le fichier.

La ligne de tirets avec 1,7 au milieu nous indique que nous regardons maintenant les lignes de alpha2. Encore une fois, nous examinons les lignes 1 à 7, le mot Dave à la ligne 4 étant signalé comme étant différent.

Trois lignes de contexte au-dessus et en dessous de chaque modification sont la valeur par défaut. Vous pouvez spécifier le nombre de lignes de contexte souhaitées diff fournir. Pour ce faire, utilisez le -C (contexte copié) avec un «C» majuscule et indiquez le nombre de lignes que vous souhaitez:

colordiff -C 2 alpha1 alpha2

Sortie de colordiff avec option -C 2

En relation :  Microsoft abandonne les mises à jour forcées constantes de Windows 10

La deuxième diff l’option qui offre un contexte est la -u (contexte unifié) option.

colordiff -u alpha1 alpha2

Sortie de colordiff avec l'option -u

Comme précédemment, nous avons un en-tête sur la sortie. Les deux fichiers sont nommés et leurs heures de modification sont affichées. Il y a des tirets (-) avant le nom des signes alpha1 et plus (+) avant le nom de alpha2. Cela nous indique que les tirets seront utilisés pour faire référence à alpha1 et que les signes plus seront utilisés pour désigner alpha2. Des lignes qui commencent par des signes (@). Ces lignes marquent le début de chaque différence. Ils nous indiquent également quelles lignes sont affichées à partir de chaque fichier.

On nous montre les trois lignes avant et après la ligne marquée comme étant différente afin que nous puissions voir le contexte de la ligne modifiée. Dans la vue unifiée, les lignes avec la différence sont affichées les unes au-dessus des autres. La ligne d’alpha1 est précédée d’un tiret et la ligne d’alpha2 est précédée d’un signe plus. Cet affichage réalise en huit lignes ce que l’affichage contextuel copié ci-dessus a mis quinze à faire.

Comme vous vous en doutez, nous pouvons demander diff pour fournir exactement le nombre de lignes de contexte unifié que nous aimerions voir. Pour ce faire, utilisez le -U (contexte unifié) avec un «U» majuscule et indiquez le nombre de lignes souhaité:

colordiff -U 2 alpha1 alpha2

Sortie de colordiff avec l'option -U 2

Ignorer l’espace blanc et la casse

Analysons deux autres fichiers, test4 et test5. Ceux-ci ont les noms de six super-héros en eux.

colordiff -y -W 70 test4 test5

Sortie de colordiff sur les fichiers test4 et test5

Les résultats montrent que diff ne trouve rien de différent avec les lignes Black Widow, Spider-Man et Thor. Il signale les changements avec les lignes Captain America, Ironman et The Hulk.

Alors qu’est-ce qui est différent? Eh bien, dans le test5, Hulk est orthographié avec un «h» minuscule, et Captain America a un espace supplémentaire entre «Captain» et «America». OK, c’est clair à voir, mais qu’est-ce qui ne va pas avec la ligne Ironman? Il n’y a pas de différences visibles. Voici une bonne règle de base. Si vous ne pouvez pas le voir, la réponse est un espace blanc. Il y a presque certainement un espace ou deux parasites, ou un caractère de tabulation, à la fin de cette ligne.

S’ils ne comptent pas pour vous, vous pouvez instruire diff pour ignorer des types spécifiques de différence de ligne, notamment:

  • -je: Ignorez les différences de casse.
  • -Z: Ignorez l’espace blanc de fin.
  • -b: Ignorez les modifications de la quantité d’espace blanc.
  • -w: Ignorez tous les changements d’espaces blancs.

Demandons à diff de vérifier à nouveau ces deux fichiers, mais cette fois d’ignorer toute différence de casse.

colordiff -i -y -W 70 test4 test5

la sortie de colordiff ignore la casse

Les lignes avec «The Hulk» et «The Hulk» sont désormais considérées comme une correspondance, et aucune différence n’est signalée pour un «h» minuscule. Demandons diff pour ignorer également les espaces blancs de fin.

colordiff -i -Z -y -W 70 test4 test5

La sortie de colordiff ignore les espaces blancs de fin

Comme on le soupçonnait, un espace blanc de fin a dû être la différence sur la ligne Ironman car diff ne signale plus de différence pour cette ligne. Cela laisse Captain America. Demandons diff ignorer la casse et ignorer tout problèmes d’espaces blancs.

colordiff -i -w -y -W 70 test4 test5

La sortie de colordiff ignore tous les espaces blancs

En disant diff ignorer les différences qui ne nous préoccupent pas, diff nous dit que, pour nos besoins, les fichiers correspondent.

Le diff La commande a beaucoup plus d’options, mais la majorité d’entre elles concernent la production d’une sortie lisible par machine. Ceux-ci peuvent être consultés sur le Linux page de manuel. Les options que nous avons utilisées dans les exemples ci-dessus vous permettront de retrouver toutes les différences entre les versions de vos fichiers texte, en utilisant la ligne de commande et les globes oculaires humains.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.