2013-05-07 11 views
34

Ich habe 2 Quelldateien, sie sind verschiedene Versionen der gleichen Sache. Allerdings hat man einen anderen Editor durchlaufen, der Änderungen am Einzug vorgenommen hat, so dass alle Zeilen im diff anders sind.Wie kann ich 2 Dateien differieren, während führende Leerzeichen ignoriert

Gibt es einen Diff-Befehl oder einen Filter, den ich verwenden kann, um mit zu differieren, so dass die Ausgabe nur Zeilen sind, die nach Ignorieren der führenden Leerzeichen/Tabs unterschiedlich sind?

Antwort

46

diff hat einige Optionen, die Ihnen 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 

So diff -w old new alle Leerzeichen ignorieren sollte und somit im wesentlichen nur unterschiedliche Linien berichten.

+6

Es ist erwähnenswert, dass "-w" vor dem Vergleich effektiv alle Leerzeichen aus den Zeilen entfernt, also werden 'ab' und 'a b' als identisch angesehen. Ich bevorzuge "-b", weil es Whitespace _changes_ ignoriert, was bedeutet, dass "ab" und "ab" als unterschiedlich angesehen werden, aber 'ab' und' a' + _mehrere Leerzeichen_ + 'b' (Entschuldigung, Mini-Markdown würde kein Mehrfaches erlauben Leerzeichen im Code!) werden als gleich angesehen. –

+0

Wie kann ich alle Zeilenumbrüche ignorieren? – Goldname

+2

Kann ich 'diff' anweisen, gleichwertige Serienerweiterungen für transzendente Zahlen wie e und pi zu ignorieren? – geneorama

1

Wenn man Tabs falsch verwenden, können Sie can fix that

expand bad_file 
0
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 -w Option alle Leerzeichen werden ignoriert, bevor diffing, so eine Zeile wie this i s a line und this is a line in jeder Datei wird als thisisaline vergleichen und Unterschiede nicht melden.

Neben dem -w Option Problem, auch -b Option hat kleinere Probleme und das nicht Leerzeichen ignorieren, wenn an der Bettelei einer Linie kommt

So sollen Sie sed verwenden diese Leerzeichen am Anfang zu entfernen aufgetreten zuerst, dann tun `diff -bB.

Verwandte Themen