2009-10-28 116 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答案,因爲它似乎正是你要求的。