2つのファイルを比較し、実際にはすべての空白を無視するアプリケーションを探しています。たとえば、次のようになります。
class foo {
bar
spaz
}
と同等に同等です
class foo{bar spaz}
または、同様に
classfoo {
barspaz}
だがしかし
classfoo {
spazspaz
}
つまり、前の例のspaz
が他の例のbar
の代わりになっていることがわかります。 2つのファイルを比較するだけで済みます。
diff -w
コマンド、違い行ごとが空白の場合にのみ空白を無視します。 完全に空白を無視するオプションが表示されません。tr
コマンドのようなものをお探しですか?これが manpages です。私の知る限り、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.}}
行指向であるにもかかわらず、diff could要求されていることを実行するように作成されます。大まかに言って、diff -wを実行してから、diff出力を後処理することができます。 diff出力を調べ、さまざまな行のペアを結合して、それらが(現在)他のファイルの行と一致するかどうかを確認できます。
O(n ^ 2)または他の厄介なもののようですが、それ自体を(たとえば)結合なし、2行の結合、ファイル1の3行の結合X結合なし、結合に制限すると、非常に役立ちます。 2行、diff出力の移動する「ウィンドウ」でファイル2の3行を結合します。 (Xは〜「外積」です)
実際、Perlのdiff出力後処理スクリプトが数時間の作業で実行できる仕事のようです((Perl)プログラミングスキルによって異なります)
たぶん、仕事でやりたくない仕事があるときは... :-)