2013-05-07 19 views
34

我有2個源文件,它們是同一個東西的不同版本。然而,一個人已經通過一個不同的編輯器進行縮進更改,所以所有的行都顯示不同的差異。如何區分2個文件而忽略前導空格

是否有差異命令或過濾器我可以用來比較,以便輸出只會是忽略前導空格/選項卡後不同的行?

回答

46

diff有一些選項,可以對你有用:

-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應該忽略所有的空格,因此報告僅僅基本上與不同的線路。

+6

值得注意的是'-w'在比較前有效地去除了行中的所有空格,所以'ab'和'a b'被認爲是相同的。我更喜歡'-b',因爲它忽略空白_changes_,這意味着'ab'和'ab'被認爲是不同的,但是'ab'和'a' + _multiple spaces_ +'b'(對不起,迷你Markdown不允許多個代碼中的空格!)被認爲是相同的。 – 2015-10-16 07:56:48

+0

如何忽略所有換行符? – Goldname 2016-09-29 23:15:02

+2

我可以告訴'diff'忽略像e和pi這樣的超越數的等價級數展開嗎? – geneorama 2017-03-27 20:13:25

1

如果一個人不正確地使用標籤,你 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 

請注意,-w選項將忽略版本比較之前的所有空格,所以喜歡在每個this i s a linethis is a line線文件將比較爲thisisaline,不會報告差異。

旁邊的-w的選項問題,甚至-b選項有一些小問題,如果付出了線的乞討

所以,你應該用sed刪除這些空格在啓動時首先發生然後做不忽略空格`diff -bB。

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