我有2個源文件,它們是同一個東西的不同版本。然而,一個人已經通過一個不同的編輯器進行縮進更改,所以所有的行都顯示不同的差異。如何區分2個文件而忽略前導空格
是否有差異命令或過濾器我可以用來比較,以便輸出只會是忽略前導空格/選項卡後不同的行?
我有2個源文件,它們是同一個東西的不同版本。然而,一個人已經通過一個不同的編輯器進行縮進更改,所以所有的行都顯示不同的差異。如何區分2個文件而忽略前導空格
是否有差異命令或過濾器我可以用來比較,以便輸出只會是忽略前導空格/選項卡後不同的行?
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
應該忽略所有的空格,因此報告僅僅基本上與不同的線路。
如果一個人不正確地使用標籤,你 can fix that
expand bad_file
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 line
和this is a line
線文件將比較爲thisisaline
,不會報告差異。
旁邊的-w
的選項問題,甚至-b
選項有一些小問題,如果付出了線的乞討
所以,你應該用sed
刪除這些空格在啓動時首先發生然後做不忽略空格`diff -bB。
diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
值得注意的是'-w'在比較前有效地去除了行中的所有空格,所以'ab'和'a b'被認爲是相同的。我更喜歡'-b',因爲它忽略空白_changes_,這意味着'ab'和'ab'被認爲是不同的,但是'ab'和'a' + _multiple spaces_ +'b'(對不起,迷你Markdown不允許多個代碼中的空格!)被認爲是相同的。 – 2015-10-16 07:56:48
如何忽略所有換行符? – Goldname 2016-09-29 23:15:02
我可以告訴'diff'忽略像e和pi這樣的超越數的等價級數展開嗎? – geneorama 2017-03-27 20:13:25