Ich habe oft eine Notwendigkeit, zwei Dateien zu vergleichen, während bestimmte Änderungen in diesen Dateien zu ignorieren. Ich möchte nicht ganze Zeilen ignorieren, nur einen Teil von ihnen. Der häufigste Fall sind Zeitstempel auf den Zeilen, aber es gibt ein paar Dutzend andere Muster, die ich auch ignorieren muss.diff beim Ignorieren von Mustern innerhalb einer Zeile, aber nicht die gesamte Zeile
File1:
[2012-01-02] Some random text foo
[2012-01-02] More output here
File2:
[1999-01-01] Some random text bar
[1999-01-01] More output here
In diesem Beispiel möchte ich den Unterschied auf der Linie 1, um zu sehen, aber nicht auf Zeilennummer 2.
diff der Verwendung -I Option wird nicht funktionieren, da es die gesamte Zeile ignoriert. Ideal Ausgang:
--- 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
kann ich vorverarbeitet diese Dateien mit sed:
sed -e's/^\[....-..-..\]//' <file1> file1.tmp
sed -e's/^\[....-..-..\]//' <file2> file2.tmp
diff -u file1.tmp file2.tmp
aber dann muss ich irgendwo diese temporären Dateien setzen, und daran denken, sie danach zu reinigen. Außerdem verweist meine Diff-Ausgabe nicht mehr auf die ursprünglichen Dateinamen und gibt nicht mehr die ursprünglichen Zeilen aus.
Gibt es eine weit verbreitete Variante von diff oder ein ähnliches Werkzeug, das dies als einen einzigen Befehl ausführen kann?
Ich denke, die Daten können mit etwas wie '--label = "file1 $ (stat --printf"% y "file1)"' enthalten sein. Es hört sich so an, als käme es mir am nächsten, wenn ich nicht auf die diffutils-Quellen hacke. – Eric