2009-10-28 85 views

回答

16

您可能需要更多地解释您的需求。然而,最有可能的是,你可以用diff命令来做你想做的事情(只需要sort和/或grep的帮助)。

让我们假设你有两个文件:a.properties和b.properties

如果你只是想知道,如果这些文件以任何方式不同,可以使用

diff a.properties b.properties 

你如果它们是相同的或不同的列表,则不会输出。

如果您想在更多语义层面上进行比较,即两组属性是否相同,则需要多做一些。这些文件可以在文本上有所不同,但对于使用它们的Java程序来说意味着相同的东西。例如,属性可以按不同的顺序发生。可以有空行,其他空格和注释。

如果是这样的话,您是否在意这些评论是否相同?它们不会影响程序的运行,但它们有意义(并且对阅读文件的人有价值)。如果你不在乎,就把它们去掉。

你可能不在乎空行,因为它们没有意义。

您还需要处理下面的情况:文本上

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

同样,不同的(注意等号两旁的空间),但在Java中的含义相同。

从简单开始,我们假设属性以相同的顺序出现。

忽略空白行:

diff -B a.properties b.properties 

拉手随机白空间(例如。围绕等号)

diff -w a.properties b.properties 

结合所有的这样的:

diff -w -B a.properties b.properties 

地带出注释:

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

允许以不同的顺序的属性,带注释:

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

尝试使用diff程序,叫“差异/路径/到/第一/文件/路径/要/秒/文件”和猫一个grep他们。对于diff的特殊用法(如果您需要任何特别的),请尝试搜索man diff。

3

你应该看看使用diff或sdiff。我会建议事先对文件进行排序,并删除任何空行以减少噪音;例如

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 - 属性文件中的评论怎么样? – 2009-10-28 10:58:57

+0

这将显示评论之间的差异以及 – pvgoddijn 2009-10-28 15:43:07

+0

@StephenC - grep -vE“^ $ | ^#”将为您工作 – smilyface 2018-02-20 09:02:56

0

取决于你想要什么。是不同的评论是不同的?空白?订购?我认为最简单的将是一个小groovy脚本。这是一个选项吗?如果不是,请确保在使用之前去除注释abd空格并对输出进行排序diff

编辑:虽然可以让diff忽略空白,但我不确定这是否是您想要的,因为空白可能是属性值

3

对于语义比较,下注使用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

见另一个PHP代码,以差异性文件超过here

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

comm是一个有用的工具。它可以告诉你什么在file1中,而不是在file2中,file2中是什么,而不是在file1中,以及两个文件之间有什么共同之处。它要求首先对两个文件进行排序。

我upvoted @antispams PropDiff答案,因为它似乎正是你要求的。