104 votes

Comment puis-je différencier deux fichiers en ignorant les espaces blancs de tête ?

J'ai 2 fichiers sources, ce sont des versions différentes de la même chose. Cependant, l'un d'eux est passé par un éditeur différent qui a modifié l'indentation, de sorte que toutes les lignes apparaissent différentes dans diff.

Existe-t-il une commande diff ou un filtre que je peux utiliser pour faire la différence de manière à ce que la sortie ne contienne que les lignes qui sont différentes après avoir ignoré les espaces/tabulations de début de ligne ?

151voto

Lev Levitsky Points 25303

diff dispose de quelques options qui peuvent vous être utiles :

   -E, --ignore-tab-expansion
          ignore changes due to tab expansion

   -Z, --ignore-trailing-space
          ignore white space at line end

   -b, --ignore-space-change
          ignore changes in the amount of white space

   -w, --ignore-all-space
          ignore all white space

   -B, --ignore-blank-lines
          ignore changes whose lines are all blank

Alors diff -w old new devrait ignorer tous les espaces et ne signaler ainsi que les lignes substantiellement différentes.

6voto

αғsнιη Points 1205
diff -bB file[12]

-b, --ignore-space-change
      ignore changes in the amount of white space
-B, --ignore-blank-lines
      ignore changes whose lines are all blank

Veuillez noter que -w ignorera tous les espaces avant d'effectuer la comparaison, donc une ligne telle que this i s a line y this is a line dans chaque fichier seront comparés comme thisisaline et ne signalera pas les différences.

A côté de -w problème d'option, même -b a des problèmes mineurs et n'ignore pas les espaces s'ils se trouvent au début d'une ligne.

Vous devez donc utiliser sed pour supprimer les espaces survenus au début, puis faites `diff -bB.

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)

1voto

Steven Penny Points 18523

Si l'on utilise les tabulations de manière incorrecte, vous peut réparer cela

expand bad_file

0voto

Chris Koknat Points 1732

Mon outil Linux open-source 'dif' compare les fichiers en ignorant diverses différences, y compris les espaces blancs.

Il dispose de nombreuses autres options pour ignorer les commentaires ou les horodatages, trier les fichiers d'entrée, effectuer des recherches/remplacements, ignorer certaines lignes, etc.

Après avoir prétraité les fichiers d'entrée, il exécute les outils Linux meld, gvimdiff, tkdiff, ou kompare sur ces fichiers intermédiaires.

L'installation n'est pas nécessaire, il suffit de télécharger et d'exécuter l'exécutable 'dif' à partir de https://github.com/koknat/dif

Pour condenser tout espace blanc en un seul espace, utilisez l'option -white :

dif file1 file2 -white

Pour supprimer tous les espaces blancs (à l'exception des nouvelles lignes), utilisez l'option -nowhite :

dif file1 file2 -nowhite

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X