2013-04-23 63 views
5

我試圖在Linux中使用標準的diff命令序來查找文件的2項files.The內容差異做差異如下:忽略星號(*),而在Linux的

文件1

Jim 
Jack 
Tracy* 
Michelle 

文件2

Jim 
Jack 
Tracy 
Michael 

的diff文件1文件2給了我下面的:

< Tracy* 
< Michelle 
--- 
> Tracy 
> Michael 

不過,我想DIFF忽略星號(*),並提供以下的輸出:

< Michelle 
--- 
> Michael 

是否有可能做到這一點?

回答

1

使用ShinTakezou的做法,但使用sed此時:

diff <(sed 's/\*$//' file1) <(sed 's/\*$//' file2) 
+1

是的..與sed作品的差異!謝謝... – Amistad 2013-04-23 13:37:39

4

嘗試

diff -I '*$' FILE1 FILE2 

-I RE - 忽略匹配線= RE

忽略的變化,其線條的所有比賽RE

注:與線這隻作品結尾星號。

+0

不工作...差異-I '* $' 文件1文件2 3,4c3,4 <特雷西· <米歇爾 - - > Tracy > Michael – Amistad 2013-04-23 13:23:58

+0

'-I'後面的星號是否錯過? – 2013-04-23 13:38:02

+0

也許原因是在這裏http://www.gnu.org/software/diffutils/manual/diffutils.html#Specified-Lines ---我試過了,並沒有錯過星號並確認它沒有像預期的那樣直觀地工作。 – ShinTakezou 2013-04-23 13:40:20

0

如果您使用的diff不是-I選項,則可以將包含星號的行擦掉,並轉換爲臨時文件,然後區分臨時文件。如果你使用的是bash,你可以使用「two pipes」,但是如果你有這個選項,你也可以使用-I選項。無論如何這將是

sed 's/*$//' file1 >file1.temp 
sed 's/*$//' file2 >file2.temp 
diff file1.temp file2.temp 

diff <(sed 's/*$//' file1) <(sed 's/*$//' file2) 

(未測試,但它可以在其他貝殼工作太)

「明星」被刪除,從差異觀點它從來沒有存在過。

+0

不按要求工作。 grep -v infact會刪除包含asterix的任何行,因此一個臨時文件有tracy,另一個沒有。我正在尋找一個選項來忽略asterix。 – Amistad 2013-04-23 13:21:54

+0

得到了錯誤的問題......你有興趣在最終差異保持星號嗎?如果沒有,修復很容易。否則在飛行中,我不知道,diff' -I'分開 – ShinTakezou 2013-04-23 13:24:16

+1

與sed的差異作品就像一個魅力..謝謝! – Amistad 2013-04-23 13:37:06