Często potrzebuję porównać dwa pliki, ignorując pewne zmiany w tych plikach. Nie chcę ignorować całych linii, tylko ich części. Najczęstszym tego przykładem są sygnatury czasowe na liniach, ale istnieje kilka innych wzorów, które również muszę zignorować.diff ignorując wzorce w linii, ale nie całą linię
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
W tym przykładzie chcę zobaczyć różnicę na linii numer 1, ale nie na linii numer 2.
Korzystanie diff -I opcja nie będzie działać, ponieważ ignoruje całą linię. Wyjście idealny:
--- 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
mogę wstępne przetworzenie tych plików z sed:
sed -e's/^\[....-..-..\]//' <file1> file1.tmp
sed -e's/^\[....-..-..\]//' <file2> file2.tmp
diff -u file1.tmp file2.tmp
ale potem muszę umieścić te pliki tymczasowe gdzieś, i pamiętaj, aby oczyścić je później. Ponadto, moje wyjście diff nie odwołuje się już do oryginalnych nazw plików i nie emituje już oryginalnych linii.
Czy istnieje powszechnie dostępna odmiana diff lub podobne narzędzie, które może wykonać to jako pojedyncze polecenie?
Myślę, że daty mogą być włączone z czymś takim jak "--label =" file1 $ (stat - printf "% y" file1) "". Wygląda na to, że jestem najbliżej, chyba że uda mi się włamać do źródeł diffutils. – Eric