Comment comparer deux fichiers texte dans un terminal Linux

Contenu

Illustration d'une fenêtre de terminal sous Linux

Avez-vous besoin de voir les différences entre deux révisions d'un fichier texte? Ensuite diff est la commande dont vous avez besoin. Ce tutoriel vous montre comment utiliser diff sur Linux et macOS, la manière la plus simple.

Buceando en diff

Les diff La commande compare deux fichiers et produit une liste des différences entre les deux. Être plus précis, affiche une liste des modifications qui doivent être apportées au premier fichier pour correspondre au deuxième fichier. Si vous tenez compte de cela, il vous sera plus facile de comprendre le résultat de diff. Les diff La commande a été conçue pour trouver les différences entre les fichiers de code source et produire une sortie qui pourrait être lue et exploitée par d'autres programmes., comme lui pièce commander. Dans ce tutoriel, nous examinerons les façons les plus utiles et les plus conviviales d'utiliser diff.

Plongeons 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 que pensez-vous est le “deuxième fichier”. Dans l'exemple suivant, 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, eu quelques modifications supplémentaires pour que les deux fichiers ne soient pas identiques.

Nous pouvons comparer les fichiers avec cette commande. Écrit 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 options

Comment disséquons-nous ce résultat? Une fois que vous savez quoi chercher, ce ne sera pas si mal. Chaque différence est à son tour répertoriée dans une seule colonne et chaque différence est étiquetée. L'étiquette contient des chiffres des deux côtés d'une lettre, Quoi 4c4. Le premier nombre est le numéro de ligne en alpha1 et le deuxième nombre est le numéro de ligne en alpha2. La lettre du 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 deuxième fichier.
  • une: Du contenu supplémentaire doit être ajouté au premier fichier pour correspondre au deuxième fichier.

Les 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 réunions.

Lignes commençant par < vérifier le premier fichier, dans notre exemple alpha1, et les lignes qui commencent par > vérifier le deuxième fichier, alpha2. La ligne < Delta nous dit que le mot Delta est le contenu de la ligne quatre en alpha1. La ligne > Dave nous dit que le mot Dave est le contenu de la ligne quatre en alpha2. Ensuite, pour resumer, nous devons remplacer Delta par Dave à la ligne quatre dans alpha1, pour que cette ligne corresponde dans les deux fichiers.

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

Le troisième changement fait référence à une ligne qui a été supprimée d'alpha2. L'étiquette 21d20 est déchiffré comme “la ligne 21 doit être supprimé du premier fichier pour que les deux fichiers se synchronisent à partir de la ligne 20 À partir de”. Les < Uniform line nous montre le contenu de la ligne à supprimer 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é incorporées dans alpha2. Noter la 26,28 Sur l'étiquette. Les numéros sur deux lignes séparés par une virgule représentent une plage de numéros de ligne. Dans cet exemple, la gamme va de la ligne 26 aile 28. La balise est interprétée comme “sur la ligne 26 du premier fichier, ajouter les lignes 26 une 28 du deuxième fichier”. On nous montre les trois lignes dans alpha2 qui doivent être ajoutées à alpha1. Ceux-ci contiennent les mots Quirk, Etrange et charme.

Rapides à une seule ligne

Si tout ce que vous voulez savoir c'est si deux fichiers sont identiques, Utilisez le -s (signaler des fichiers identiques) option.

diff -s alpha1 alpha3

Sortie de la commande diff avec l'option -s

Vous pouvez utiliser le -q (court) option pour obtenir une déclaration tout aussi concise sur deux fichiers qui sont différents.

diff -q alpha1 alpha2

Sortie de la commande diff avec l'option -q

Une chose à laquelle faire attention est qu'avec deux fichiers identiques le-q L'option (court) se ferme complètement et ne signale rien du tout.

Une vision alternative

Les -y (Côte à côte) utilise une mise en page 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 de bouclage disgracieuses qui rendent la sortie difficile à lire. Ici, nous l'avons dit diff pour produire un affichage côte à côte et limiter la sortie à 70 Colonnes.

diff -y -W 70 alpha1 alpha2

Sortie de commande Diff avec affichage côte à côte

Le premier fichier sur la ligne de commande, alpha1, s'affiche à gauche et la deuxième ligne de la ligne de commande, alpha2, montré à droite. Les lignes de chaque fichier sont affichées, l'un à côté de l'autre. Il y a des caractères indicateurs à côté de ces lignes dans alpha2 qui ont été modifiés, supprimé ou ajouté.

  • |: 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 n'est pas dans le premier fichier.

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

diff -y -W 70 --supprimer les lignes communes 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 surbrillance de couleur à la 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 d'autres distributions Linux, utilisez l'outil de gestion de paquets de votre distribution Linux.

sudo apt-get install colordiff

Utilisation colordiff tout comme vous l'utiliseriez diff.

Sortie de la commande Colordiff sans options

En réalité, colordiff c'est un emballage pour diff, et diff fait tout le travail dans les coulisses. C'est à cause de ça, tous les diff les alternatives fonctionneront avec colordiff.

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

Fournissez un peu de contexte

Pour trouver une définition intermédiaire entre avoir toutes les lignes des fichiers affichées à l'écran et n'avoir que les lignes modifiées dans la liste, Nous pouvons demander diff fournir un certain contexte. Il y a deux façons de faire ça. Les deux manières accomplissent le même objectif, qui est de montrer quelques lignes avant et après chaque ligne modifiée. Vous pourrez voir ce qui se passe dans le fichier où la différence a été détectée.

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

couleurdiff -c alpha1 alpha2

Sortie Colordiff avec l'option -c

Les diff la sortie a un en-tête. L'en-tête liste 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 sortie.

Une ligne d'astérisques avec 1,7 au milieu indique que nous voyons des lignes d'alpha1. pour être précis, nous regardons les lignes un à sept. Le mot Delta est marqué comme modifié. A un point d'exclamation ( ! ) avec lui, et c'est rouge. Trois lignes de texte inchangé sont affichées avant et après cette ligne afin que nous puissions voir le contexte de cette ligne dans le fichier.

La ligne pointillée avec 1,7 au milieu, il nous dit que nous voyons maintenant des lignes alpha2. De nouveau, nous regardons les lignes un à sept, avec le mot Dave sur la ligne quatre marqué différent.

Trois lignes de contexte au-dessus et en dessous de chaque changement sont la valeur par défaut. Vous pouvez spécifier combien de lignes de contexte vous voulez diff Fournir. Pour faire ceci, utiliser el -C (contexte copié) avec une “C” majuscule et indiquez le nombre de lignes que vous souhaitez:

couleurdiff -C 2 alpha1 alpha2

Sortie Colordiff avec option -C 2

Le deuxième diff L'option qui fournit le contexte est la -u option (contexte unifié).

colordiff -u alpha1 alpha2

Sortie Colordiff avec l'option -u

Comme avant, nous avons un en-tête dans la sortie. Les deux fichiers sont nommés et leurs heures de modification sont affichées. il y a des scripts (-) avant le nom alpha1 et les signes plus (+) avant le nom alpha2. Cela nous indique que les tirets seront utilisés pour faire référence à alpha1 et les signes plus seront utilisés pour faire référence à alpha2. Dispersées dans toute la liste se trouvent des lignes commençant par des signes (@). Ces lignes marquent le début de toute différence. Ils nous indiquent également quelles lignes sont affichées à partir de chaque fichier.

Les trois lignes sont affichées avant et après la ligne marquée comme 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 sur les autres. La ligne alpha1 est précédée d'un tiret et la ligne alpha2 est précédée d'un signe plus. Cet écran accomplit en huit lignes ce que l'écran contextuel copié ci-dessus a mis quinze à faire.

Comment pourrions-nous attendre, Nous pouvons demander diff pour fournir exactement le nombre de lignes de contexte unifié que nous aimerions voir. Pour faire ceci, utiliser el -U (contexte unifié) avec une “U” majuscule et indiquez le nombre de lignes que vous souhaitez:

couleurdiff -U 2 alpha1 alpha2

Sortie Colordiff avec option -U 2

Ignorer les espaces et la casse

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

couleurdiff -y -W 70 test4 test5

Sortie Colordiff dans 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. Marquez les changements avec les lignes Captain America, Ironman et Hulk.

Ensuite, Qu'est-ce qui est différent? Bon, un essai5, Hulk s'écrit avec un “h” minuscules et Captain America a un espace supplémentaire entre “Capitaine” et “Amérique”. C'est bien, c'est facile à voir, mais qu'en est-il de 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 solution est un espace vide. Il y a presque certainement un espace perdu ou deux, ou un caractère de tabulation, au bout de cette ligne.

Si tu t'en fous, vous pouvez instruire diff ignorer des types spécifiques de différence de ligne, comprenant:

  • -je: Ignorer les différences entre les majuscules et les minuscules.
  • -AVEC: Ignorer les blancs de fin.
  • -B: Ignorer les changements dans la quantité d'espace blanc.
  • -w: Ignorer tous les changements d'espace.

Demandons à diff de vérifier à nouveau ces deux fichiers, mais cette fois pour ignorer toute différence dans le cas.

couleurdiff -i -y -W 70 test4 test5

sortie colordiff ignorer la casse

Les lignes avec “Hulk” et “Hulk” sont maintenant considérés comme un match, et cela ne change rien au “h” minuscule. Demandons diff pour ignorer également les espaces de fin.

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

La sortie Colordiff ignore les espaces de fin

Comme suspecté, le blanc final doit avoir été la différence dans la ligne Ironman parce que diff ne fait plus de différence pour cette ligne. Cela laisse Captain America. Demandons diff ignorer la casse et ignorer Tout le monde problèmes d'espaces.

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

La sortie de colordiff ignore tous les espaces

compte diff ignorer les différences qui ne nous concernent pas, diff nous dit que, à nos fins, les fichiers correspondent.

Les diff La commande a beaucoup plus d'options, mais la plupart d'entre eux concernent la production de résultats lisibles par machine. Ceux-ci peuvent être consultés sur Linux page de manuel. Les alternatives que nous avons utilisées dans les exemples ci-dessus vous permettront de traquer toutes les différences entre les versions de vos fichiers texte, en utilisant la ligne de commande et les yeux humains.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.