差異實際上完全忽略空白

差異實際上完全忽略空白

我正在尋找一個可以比較兩個文件的應用程序,並且實際上忽略所有空格,例如:

class foo { 
  bar
  spaz 
}

等價於

class foo{bar spaz}

或者,還有

classfoo { 
  barspaz}

但不是

classfoo { 
  spazspaz
}

也就是說,它會告訴我,spaz在前面的範例中,它已經取代了bar任何其他範例中的 。它只需要比較2個檔案。

  • 它可以是 Windows 或 linux/unix/posix 相容的實用程式
  • 我嘗試過 lin/unixdiff -w命令,它只會忽略空格(如果有差異)每行是空白。我沒有看到一個選項完全忽略空格。
  • 我還嘗試了 UECompare 或 Ultracompare,這是一個適用於 Windows 的非免費比較實用程式。

答案1

您在尋找類似tr指令的東西嗎?這裡有線上說明頁。據我所知,它包含在msysgitcygwin、 中。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可以被要求做所要求的事。粗略地說,您可以執行 diff -w,然後對 diff 輸出進行後處理。它可以查看 diff 輸出並連接各種行對,以查看它們(現在)是否與其他檔案中的行相符。

看起來可能是O(n^2) 或其他令人討厭的事情,但如果它將自身限制為(例如)不加入,加入2 行,加入文件1 X 不加入,加入3 行,它仍然會非常有幫助2 行,在 diff 輸出的移動「視窗」上連接文件 2 上的 3 行。 (其中 X 是〜“叉積”)

事實上,這似乎是 Perl diff 輸出後處理腳本只需幾個小時就可以完成的工作(取決於您的(Perl)程式設計技能)

也許當我有一些我不想在工作中做的任務時...:-)

相關內容