it-swarm.com.de

Wie kann ich 2 Dateien unterscheiden, ohne die führenden Leerzeichen zu ignorieren?

Ich habe 2 Quelldateien, es sind verschiedene Versionen derselben Sache. Einer hat jedoch einen anderen Editor durchlaufen, der Einrückungsänderungen vorgenommen hat, sodass alle Zeilen in diff unterschiedlich angezeigt werden.

Gibt es einen diff-Befehl oder einen Filter, mit dem ich mit diff vergleichen kann, so dass die Ausgabe nur Zeilen enthält, die sich unterscheiden, nachdem die führenden Leerzeichen/Tabulatoren ignoriert wurden?

47
Ching Liu

diff hat einige Optionen, die für Sie nützlich sein können:

   -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

diff -w old new sollte also alle Leerzeichen ignorieren und daher nur wesentlich unterschiedliche Zeilen melden.

65
Lev Levitsky

Wenn eine der Registerkarten falsch verwendet wird, können Sie das beheben

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

Bitte beachten Sie, dass die Option -w alle Whitespaces vor dem Vergleich ignoriert. Eine Zeile wie this i s a line und this is a line in jeder Datei wird als thisisaline verglichen und zeigt keine Unterschiede an.

Abgesehen von der -w-Option hat auch die -b-Option kleinere Probleme und ignoriert Leerzeichen nicht, wenn sie am Anfang einer Zeile stehen

Sie sollten also sed verwenden, um die beim Start aufgetretenen Whitespaces zu entfernen, dann `diff -bB '. 

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