ファイル内の特定の変更を無視して、2 つのファイルを比較する必要があることがよくあります。行全体を無視するのではなく、一部だけを無視します。これの最も一般的なケースは行のタイムスタンプですが、無視する必要がある他のパターンも数十あります。
ファイル1:
[2012-01-02] Some random text foo
[2012-01-02] More output here
ファイル 2:
[1999-01-01] Some random text bar
[1999-01-01] More output here
この例では、行番号 1 の違いを確認したいのですが、行番号 2 の違いは確認したくありません。
diff の -I オプションを使用しても、行全体が無視されるため機能しません。理想的な出力:
--- file1 2013-04-05 13:39:46.000000000 -0500
+++ file2 2013-04-05 13:39:56.000000000 -0500
@@ -1,2 +1,2 @@
-[2012-01-02] Some random text foo
+[1999-01-01] Some random text bar
[2012-01-02] More output here
これらのファイルを sed で前処理できます。
sed -e's/^\[....-..-..\]//' < file1 > file1.tmp
sed -e's/^\[....-..-..\]//' < file2 > file2.tmp
diff -u file1.tmp file2.tmp
しかし、それらの一時ファイルをどこかに置く必要があり、後でそれらをクリーンアップすることを忘れないでください. また、私の差分出力は元のファイル名を参照しなくなり、元の行を出力しなくなりました。
これを単一のコマンドとして実行できる、広く利用可能な diff の変種、または同様のツールはありますか?