2013-05-07 9 views
34

Mam 2 pliki źródłowe, są to różne wersje tego samego. Jednak przez inny edytor dokonano zmian wcięć, więc wszystkie linie są wyświetlane w różny sposób.Jak mogę zmienić 2 pliki ignorując wiodącą białą przestrzeń

Czy istnieje polecenie lub filtr diff, którego można użyć do odróżnienia, tak aby dane wyjściowe były tylko liniami, które są różne po zignorowaniu spacji/zakładek?

Odpowiedz

46

diff ma kilka opcji, które mogą być przydatne dla Ciebie:

-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 

Więc diff -w old new należy ignorować wszystkie przestrzenie, a zatem zgłosić tylko znacząco różne linie.

+6

Warto zauważyć, że '-w' skutecznie usuwa wszystkie białe spacje z linii przed porównaniem, więc' ab' i 'a b' są uważane za identyczne. Wolę '-b', ponieważ ignoruje białe znaki _zmiany_, co oznacza, że' ab' i 'ab' są uważane za różne, ale' ab' i 'a' + _między wieloma spacjami_ +' b' (przepraszam, mini-Markdown nie pozwala na wiele spacje w kodzie!) są traktowane tak samo. –

+0

Jak mogę zignorować wszystkie znaki nowej linii? – Goldname

+2

Czy mogę powiedzieć, że 'diff' ignoruje równoważne rozszerzenia serii dla liczb transcendentalnych, takich jak e i pi? – geneorama

1

Jeśli ktoś jest błędnie za pomocą zakładek, musisz 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 

Uwaga -w opcja ignoruje wszystkie spacje przed diffing, więc linia jak this i s a line i this is a line w każdym plik będzie porównywany jako thisisaline i nie będzie raportował różnic.

Obok od -w opcji problemu, nawet opcja -b ma drobne problemy i że nie ignoruje spacje czy przyjść na żebractwa linii

Więc należy użyć sed usunąć te odstępy wystąpił na początku pierwszy wtedy zrobić `diff -bB.

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