
我正在尋找一個可以比較兩個文件的應用程序,並且實際上忽略所有空格,例如:
class foo {
bar
spaz
}
等價於
class foo{bar spaz}
或者,還有
classfoo {
barspaz}
但不是
classfoo {
spazspaz
}
也就是說,它會告訴我,spaz
在前面的範例中,它已經取代了bar
任何其他範例中的 。它只需要比較2個檔案。
- 它可以是 Windows 或 linux/unix/posix 相容的實用程式
- 我嘗試過 lin/unix
diff -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可以被要求做所要求的事。粗略地說,您可以執行 diff -w,然後對 diff 輸出進行後處理。它可以查看 diff 輸出並連接各種行對,以查看它們(現在)是否與其他檔案中的行相符。
看起來可能是O(n^2) 或其他令人討厭的事情,但如果它將自身限制為(例如)不加入,加入2 行,加入文件1 X 不加入,加入3 行,它仍然會非常有幫助2 行,在 diff 輸出的移動「視窗」上連接文件 2 上的 3 行。 (其中 X 是〜“叉積”)
事實上,這似乎是 Perl diff 輸出後處理腳本只需幾個小時就可以完成的工作(取決於您的(Perl)程式設計技能)
也許當我有一些我不想在工作中做的任務時...:-)