2009-10-28 13 views

Odpowiedz

16

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 
0

spróbuje użyć diff programu, nazywając "diff/ścieżka/do/pierwszego/file/path/to/sekundy/file" i kotów a grep im. Dla specjalnych zastosowań diff (jeśli potrzebujesz czegoś specjalnego), spróbuj wyszukać man diff.

3

Powinieneś sprawdzić, używając diff lub sdiff. Zalecam wcześniejsze sortowanie plików i usuwanie pustych linii w celu zmniejszenia szumów; na przykład

file1=/var/tmp/foo.txt 
file2=/var/tmp/bar.txt 

sort ${file1} | grep -v '^$' > ${file1}.tmp 
sort ${file2} | grep -v '^$' > ${file2}.tmp 
sdiff ${file1} ${file2} 
+0

@Adamski - a co z komentarzami w plikach własności? –

+0

to pokaże różnice między komentarzami – pvgoddijn

+0

@StephenC - grep -vE "^ $ |^#" będzie działać dla ciebie – smilyface

0

Zależy od tego, co chcesz. Czy inny komentarz to różnica? Biała przestrzeń? Zamówienie? Myślę, że najprostszy byłby mały, wesoły scenariusz. Czy to jest opcja? Jeśli nie, upewnij się, że usuniesz komentarze i usuniesz białe znaki i posortujesz dane wyjściowe przed użyciem. EDIT: podczas gdy możliwe jest ignorowanie odstępów między znakami, nie jestem pewien, czy to jest to, czego chcesz, ponieważ biała spacja może być częścią wartość właściwości

3

Dla porównania semantycznego, zakład ter use PropDiff.

Usage: [flags] properties-file1 properties-file2 [-f filenameOrPathPrefixForResults] 
    flags: 
    -c property settings that are common to both p1 and p2, where p2 take precedence 
    -u union p1 and p2 where p2 has higher precedence 
    -1 properties settings that are only in p1 
    -2 properties settings that are only in p2 
    -d intersection of properties in p1 and p2 that have different values 
    -e intersection of properties in p1 and p2 that have equal values 
0

Zobacz inny kod PHP diff plików właściwości w here

php list_missing_properties.php "file1.properties" "file2.properties" 
1

comm jest użytecznym narzędziem. Potrafi powiedzieć, co znajduje się w pliku1, a nie w pliku2, co znajduje się w pliku2, a nie w pliku1, oraz co jest wspólne między tymi dwoma plikami. Wymaga najpierw posortowania dwóch plików.

Wzmocniłem @samispams PropDiff odpowiedź, ponieważ wydaje się dokładnie to, o co prosisz.

Powiązane problemy