2014-05-07 81 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