Prawdopodobnie musisz nieco wyjaśnić swoje wymagania. Jednak najprawdopodobniej możesz zrobić to, co chcesz, za pomocą polecenia diff (z niewielką pomocą sortowania i/lub grep).
Załóżmy masz dwa pliki: a.properties i b.properties
Jeśli po prostu chcesz wiedzieć, czy pliki są różne w dowolny sposób, można użyć
diff a.properties b.properties
Będziesz nie otrzymuj danych wyjściowych, jeśli są identyczne lub lista różnic.
Jeśli chcesz porównać na poziomie bardziej semantycznym, to znaczy, że dwa zestawy właściwości są identyczne, to musisz zrobić trochę więcej. Pliki mogą się różnić tekstowo, ale oznaczają to samo w programach Java, które ich używają. Na przykład właściwości mogą występować w innej kolejności. Mogą być puste linie, inne spacje i komentarze.
Jeśli tak, to czy obchodzi cię, że komentarze są identyczne? Nie wpłyną one na działanie twojego programu, ale mają znaczenie (i wartość dla osób czytających plik). Jeśli cię to nie obchodzi, pozbądź się ich.
Prawdopodobnie nie interesują cię puste linie, ponieważ nie mają znaczenia.
Należy również obsługiwać następujące sprawy:
a.properties:
prop = value
b.properties:
prop=value
Znowu inny tekstowo (nota przestrzenie wokół równych), ale mają takie samo znaczenie w języku Java.
Zaczynając od prostoty, załóżmy, że właściwości występują w tej samej kolejności.
Ignoruj puste wiersze:
diff -B a.properties b.properties
Handle losowych spacje (np.wokół znaku równości)
diff -w a.properties b.properties
Połącz to wszystko:
diff -w -B a.properties b.properties
Strip się komentarze:
grep -v '^#.*$' a.properties > a.tmp
grep -v '^#.*$' b.properties > b.tmp
diff -w -B a.tmp b.tmp
rm a.tmp b.tmp
Zezwalaj na właściwości w innej kolejności, komentarze taśmy:
grep -v '^#.*$' a.properties | sort > a.tmp
grep -v '^#.*$' b.properties | sort > b.tmp
diff -w -B a.tmp b.tmp
rm a.tmp b.tmp
@Adamski - a co z komentarzami w plikach własności? –
to pokaże różnice między komentarzami – pvgoddijn
@StephenC - grep -vE "^ $ |^#" będzie działać dla ciebie – smilyface