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

Chi*_*Liu 60 diff

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

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

Lev*_*sky 86

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
Run Code Online (Sandbox Code Playgroud)

所以diff -w old new应该忽略所有空格,因此只报告截然不同的行.

  • 值得注意的是,`-w`在比较之前有效地从行中删除了所有空格,因此`ab`和`ab`被认为是相同的.我更喜欢`-b`因为它忽略了空格_changes_,这意味着`ab`和`ab`被认为是不同的但是`ab`和`a` + _multiple spaces_ +`b`(对不起,mini-Markdown不允许多个代码中的空格!)被认为是相同的. (10认同)
  • 我可以告诉`diff`忽略e和pi等超越数的等价系列扩张吗? (3认同)

αғs*_*нιη 9

diff -bB file[12]
Run Code Online (Sandbox Code Playgroud)
-b, --ignore-space-change
      ignore changes in the amount of white space
-B, --ignore-blank-lines
      ignore changes whose lines are all blank
Run Code Online (Sandbox Code Playgroud)

请注意,该-w选项将在比较之前忽略所有空格,因此每个文件中类似this i s a lineand 的行将this is a line进行比较thisisaline,并且不会报告差异。

除了-w选项问题之外,即使-b选项也有小问题,并且如果出现在行的开头,也不会忽略空格

因此,您应该sed首先删除开始时出现的那些空格,然后执行“diff -bB”。

diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
Run Code Online (Sandbox Code Playgroud)