Diff 实际上完全忽略了空格

Diff 实际上完全忽略了空格

我正在寻找一个可以区分两个文件并实际上忽略所有空格的应用程序,例如:

class foo { 
  bar
  spaz 
}

等同于

class foo{bar spaz}

或者

classfoo { 
  barspaz}

但不是

classfoo { 
  spazspaz
}

即它会向我显示上一个示例中的内容已在任何其他示例中spaz取代。它只需要比较 2 个文件。bar

  • 它可以是与 Windows 或 Linux/Unix/POSIX 兼容的实用程序
  • 我试过 lin/unixdiff -w命令,它只会在差异出现时忽略空格每行是空格。我没有看到选项完全忽略空格。
  • 我还尝试了 UECompare 或 Ultracompare,一款适用于 Windows 的非免费比较实用程序。

答案1

您是否在寻找类似tr命令的内容?以下是手册页。据我所知它包含在msysgit、、cygwin和中。gnuwin32 tools

因此,您可以通过执行以下操作来删除差异之前的所有空格:

tr --delete '[:space:]' <filename.txt

然后,您可以将该命令的输出提供给diff它并使其工作而没有任何空格。

例如,我有一个名为的文件HelloWorldApp.java。让我向你展示如何tr处理它:

C:\temp>cat HelloWorldApp.java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}

答案2

尽管是面向行的,但不同可以执行所请求的操作。大致来说,您可以执行 diff -w,然后对 diff 输出进行后处理。它可以查看 diff 输出并连接各种行对,以查看它们(现在)是否与另一个文件中的行匹配。

似乎它可能是 O(n^2) 或其他令人讨厌的东西,但如果它将其自身限制为(比如说)无连接、连接 2 行、在文件 1 上连接 3 行 X 无连接、连接 2 行、在文件 2 上连接 3 行在差异输出的移动“窗口”上,它仍然会非常有帮助。(其中 X 是〜“交叉积”)

事实上,这似乎是一个 Perl diff 输出后处理脚本只需几个小时就能完成的工作(取决于你的(Perl)编程技能)

也许当我有一些我不想在工作中做的事情时...:-)

相关内容