web-dev-qa-db-fra.com

Comment puis-je diff 2 fichiers tout en ignorant les espaces blancs

J'ai 2 fichiers source, ce sont des versions différentes de la même chose. Cependant, on est passé par un éditeur différent qui a apporté des modifications au retrait, de sorte que toutes les lignes apparaissent différemment dans diff.

Existe-t-il une commande diff ou un filtre que je peux utiliser pour diff avec afin que la sortie ne contienne que des lignes différentes après avoir ignoré les espaces/tabulations en tête?

47
Ching Liu

diff a 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

Donc, diff -w old new doit ignorer tous les espaces et ne signaler que des lignes très différentes.

65
Lev Levitsky

Si l’on utilise mal les onglets, vous pouvez résoudre ce problème

expand bad_file
1
Steven Penny
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 l'option -w ignorera tous les espaces avant la différence. Ainsi, une ligne comme this i s a line et this is a line dans chaque fichier sera comparée à thisisaline et ne signalera pas les différences.

En plus du problème d'option -w, même l'option -b présente des problèmes mineurs et elle n'ignore pas les espaces, si elle vient au début d'une ligne.

Vous devriez donc utiliser sed pour supprimer les espaces blancs apparus au début puis faire `diff -bB. 

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
0
αғsнιη