如何在忽略前导空格的同时区分2个文件

时间:2013-05-07 15:33:42

标签: diff

我有2个源文件,它们是同一个东西的不同版本。但是,有人通过一个不同的编辑器进行缩进更改,所以所有的行都显示出不同的差异。

我是否可以使用diff命令或过滤器进行差异处理,以便在忽略前导空格/制表符后输出只是不同的行?

4 个答案:

答案 0 :(得分:71)

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应该忽略所有空格,因此只报告截然不同的行。

答案 1 :(得分:1)

如果您使用的标签不正确,则为您 can fix that

expand bad_file

答案 2 :(得分: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)

答案 3 :(得分:0)

我的开源Linux工具'dif'在比较文件时忽略了空格等各种差异。

它还有许多其他选项,用于忽略注释或时间戳,对输入文件进行排序,进行搜索/替换,忽略某些行等。

预处理输入文件后,它会在这些中间文件上运行Linux工具meld,gvimdiff,tkdiff或kompare。

不需要安装,只需从https://github.com/koknat/dif下载并运行'dif'可执行文件

要将任何空格压缩为单个空格,请使用-white选项:

dif file1 file2 -white

要删除所有空格(换行符除外),请使用-nowhite选项:

dif file1 file2 -nowhite