2009-10-28 13 views

risposta

16

Probabilmente dovrai spiegare un po 'di più le tue esigenze. Tuttavia è molto probabile che tu possa fare ciò che vuoi con il comando diff (con un piccolo aiuto da sort e/o grep).

Supponiamo di avere due file: a.properties e b.properties

Se si vuole semplicemente sapere se i file sono diversi in qualsiasi modo, è possibile utilizzare

diff a.properties b.properties 

Avrete non ottenere output se sono identici o un elenco di differenze.

Se si desidera un confronto su un livello più semantico, cioè, le due serie di proprietà sono identiche, è necessario fare un po 'di più. I file possono differire testualmente, ma significano la stessa cosa per i programmi Java che li usano. Ad esempio, le proprietà possono verificarsi in un ordine diverso. Possono esserci righe vuote, altri spazi bianchi e commenti.

Se questo è il caso, ti interessa se i commenti sono identici? Non avranno effetto sul funzionamento del tuo programma, ma hanno un significato (e valore per chi legge il file). Se non ti interessa, eliminali.

Probabilmente non ti importa delle righe vuote perché non hanno alcun significato.

È inoltre necessario per gestire il caso seguente:

a.properties: 
    prop = value 
b.properties: 
    prop=value 

Anche in questo caso, diversi testualmente (notare gli spazi intorno alle pari), ma hanno lo stesso significato in Java.

A partire da semplice, assumiamo che le proprietà si verifichino nello stesso ordine.

Ignora righe vuote:

diff -B a.properties b.properties 

maniglia spazio bianco casuale (ad es.intorno il segno di uguale)

diff -w a.properties b.properties 

Combinate tutto questo:

diff -w -B a.properties b.properties 

striscia fuori commenti:

grep -v '^#.*$' a.properties > a.tmp 
grep -v '^#.*$' b.properties > b.tmp 
diff -w -B a.tmp b.tmp 
rm a.tmp b.tmp 

Consenti per immobili a un ordine diverso, commenti striscia:

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

tenta di utilizzare il programma diff, chiamando "diff/path/to/primo/file/path/to/secondo/file" e gatto li grep. Per usi speciali di diff (se hai bisogno di qualcosa di speciale), prova a cercare man diff.

3

Si dovrebbe esaminare utilizzando diff o sdiff. Consiglierei di ordinare i file in anticipo e rimuovere le righe vuote per ridurre la quantità di rumore; per esempio.

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: che dire dei commenti nei file di proprietà? –

+0

questo mostrerà le differenze tra i commenti pure – pvgoddijn

+0

@StephenC - grep -vE "^ $ |^#" funzionerà per voi – smilyface

0

Dipende da ciò che si desidera. Un commento diverso è una differenza? Lo spazio bianco? Ordine? Penso che il più semplice sarebbe un piccolo script groovy. È un'opzione? Se no, assicurati di eliminare i commenti e gli spazi bianchi prima di utilizzare diff

EDIT: mentre è possibile lasciare diff ignorare gli spazi, non sono sicuro se questo è ciò che vuoi come spazio bianco potrebbe far parte di un valore delle proprietà

3

Per il confronto semantico, scommettere utilizzare 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

vedere un altro codice PHP per file di proprietà diff oltre here

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

comm è un programma di utilità utile. Può dirti cosa c'è in file1 e non in file2, cosa c'è in file2 e non in file1, e cosa è comune tra i due file. Richiede la prima ordinamento dei due file.

Ho upvoted la risposta di @antispams PropDiff poiché sembra essere esattamente quello che stai chiedendo.

Problemi correlati