2014-05-07 75 views
8

說輸出I具有command1其輸出這樣的:grep的使用來自另一命令

b05808aa-c6ad-4d30-a334-198ff5726f7c 
59996d37-9008-4b3b-ab22-340955cb6019 
2b41f358-ff6d-418c-a0d3-ac7151c03b78 
7ac4995c-ff2c-4717-a2ac-e6870a5670f0 

我也有command2其輸出這樣的:

b05808aa-c6ad-4d30-a334-198ff5726f7c 
59996d37-9008-4b3b-ab22-340955cb6019 

有一種方法,以從command1輸出grep來不包括從command2匹配的任何行,以便最終輸出看起來像這樣?

2b41f358-ff6d-418c-a0d3-ac7151c03b78 
7ac4995c-ff2c-4717-a2ac-e6870a5670f0 
+0

可能用'sort'和'awk'來做 –

+0

那些行嗎?如果是這樣,是的。 – Jiminion

回答

13

發出此grep的

command1 | grep -vF -f <(command2) 

這裏,

-F意味着固定字符串匹配*

-v意味着反轉匹配

-f意味着拍拍文件燕鷗

<(command)實際上用該命令創建一個FIFO並在重定向中使用它。

+0

完美謝謝,我錯過了<()部分,不知道你能做到這一點 – bruchowski

5

要獲得所有從command1輸出沒有出現在command2輸出線:

grep -vFf <(command2) <(command1) 

-f告訴grep爲使用來自文件模式。在這種情況下,該文件是command2的輸出。 -F告訴grep這些模式將被視爲固定字符串,而不是正則表達式。 -v告訴grep反轉其正常行爲,並只顯示行而不是匹配的行。

+0

謝謝約翰,我贊成你,但我標記了另一個答案,因爲我更喜歡語法 – bruchowski