99

我有 2 个源文件,它们是同一事物的不同版本。但是,已经通过不同的编辑器进行了缩进更改,因此所有行在 diff 中都显示不同。

是否有 diff 命令或过滤器可以用来区分,以便在忽略前导空格/制表符后输出只会是不同的行?

4

4 回答 4

142

diff has some options that can be useful to you:

   -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 should ignore all spaces and thus report only substantially different lines.

于 2013-05-07T15:37:32.047 回答
4
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 lineandthis is a line的行将比较为thisisaline并且不会报告差异。

除了-w选项问题之外,即使-b选项也有一些小问题,如果出现在一行的乞求时,它也不会忽略空格

所以你应该sed先删除那些在开始时出现的空格,然后执行`diff -bB.

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
于 2017-09-28T16:38:58.063 回答
1

如果一个人不正确地使用标签,你 可以修复它

expand bad_file
于 2013-05-07T15:38:07.277 回答
0

我的开源 Linux 工具 'dif' 比较文件,同时忽略包括空格在内的各种差异。

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

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

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

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

dif file1 file2 -white

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

dif file1 file2 -nowhite
于 2020-09-14T19:17:58.233 回答