2009-10-28 6 views

Répondre

16

Vous avez probablement besoin d'expliquer vos besoins un peu plus. Cependant, il est fort probable que vous pouvez faire ce que vous voulez avec la commande diff (avec un peu d'aide de tri et/ou de grep).

Supposons que vous avez deux fichiers: a.properties et b.properties

Si vous voulez simplement savoir si les fichiers sont différents de toute façon, vous pouvez utiliser

diff a.properties b.properties 

Vous aurez n'obtient aucune sortie si elles sont identiques ou une liste de différences.

Si vous souhaitez une comparaison à un niveau plus sémantique, c'est-à-dire si les deux ensembles de propriétés sont identiques, vous devez en faire un peu plus. Les fichiers peuvent différer textuellement, mais signifient la même chose pour les programmes Java qui les utilisent. Par exemple, les propriétés peuvent apparaître dans un ordre différent. Il peut y avoir des lignes vides, d'autres espaces et des commentaires.

Si c'est le cas, cela vous importe-t-il si les commentaires sont identiques? Ils n'affecteront pas le fonctionnement de votre programme, mais ils ont une signification (et une valeur pour ceux qui lisent le fichier). Si cela ne vous dérange pas, effacez-les.

Vous ne vous souciez probablement pas des lignes vides car elles n'ont aucune signification.

Vous devez également gérer le cas suivant:

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

Encore une fois, différent textuellement (notez les espaces autour des égaux) mais ont la même signification en Java. En commençant simplement, supposons que les propriétés se produisent dans le même ordre.

Ignore lignes vides:

diff -B a.properties b.properties 

poignée espace blanc aléatoire (par exemple.autour du signe égal)

diff -w a.properties b.properties 

Combine tout cela:

diff -w -B a.properties b.properties 

dépouilleront commentaires:

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

Permettre propriétés dans un ordre différent, les commentaires de la bande:

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

Essayez d'utiliser le programme diff, appelant « diff/chemin/vers/premier/fichier/chemin/vers/seconde/fichier » et le chat un grep eux. Pour des utilisations spéciales de diff (si vous avez besoin de quelque chose de spécial), essayez de rechercher diff diff.

3

Vous devriez regarder en utilisant diff ou sdiff. Je recommande de trier vos fichiers à l'avance et de supprimer les lignes vides pour réduire la quantité de bruit; par exemple.

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 - qu'en est-il des commentaires dans les fichiers de propriétés? –

+0

cela montrera des différences entre les commentaires ainsi – pvgoddijn

+0

@StephenC - grep -vE "^ $ |^#" travaillera pour vous – smilyface

0

Dépend de ce que vous voulez. Un commentaire différent est-il une différence? Espace blanc? Commande? Je pense que le plus facile serait un petit script groovy. Est-ce une option? Si non, assurez-vous de supprimer les commentaires et de trier la sortie avant d'utiliser diff

EDIT: bien qu'il soit possible de laisser ignorer les espaces, je ne suis pas sûr que ce soit ce que vous voulez car les espaces peuvent faire partie d'un valeur des propriétés

3

Pour la comparaison sémantique, parier utilisez 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

Voir un autre code PHP pour les fichiers de propriétés diff sur here

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

comm est un utilitaire utile. Il peut vous dire ce qu'il y a dans le fichier 1 et non dans le fichier 2, ce qui est dans le fichier 2 et non dans le fichier 1, et ce qui est commun entre les deux fichiers. Cela nécessite que les deux fichiers soient triés en premier.

J'ai mis en ligne @antispams PropDiff réponse car il semble être exactement ce que vous demandez.