grep使用另一个命令的输出

bru*_*ski 11 unix linux bash grep

说我有command1哪个输出:

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

我也有command2这个输出:

b05808aa-c6ad-4d30-a334-198ff5726f7c
59996d37-9008-4b3b-ab22-340955cb6019
Run Code Online (Sandbox Code Playgroud)

有没有办法grep输出command1从不包括任何匹配的行command2,以便最终输出看起来像这样?

2b41f358-ff6d-418c-a0d3-ac7151c03b78
7ac4995c-ff2c-4717-a2ac-e6870a5670f0
Run Code Online (Sandbox Code Playgroud)

Shi*_*dim 19

发出这个grep

command1 | grep -vF -f <(command2)
Run Code Online (Sandbox Code Playgroud)

这里,

-F表示固定字符串匹配*

-v意味着反转匹配

-f 表示带有模式的文件

<(command) 实际上使用该命令创建FIFO并在重定向时使用它.


Joh*_*024 6

从输出中获取所有行command1不会出现在输出中command2:

grep -vFf <(command2) <(command1)
Run Code Online (Sandbox Code Playgroud)

-f告诉grep我们使用来自文件的模式.在这种情况下,该文件是输出command2.-F告诉grep我们这些模式将被视为固定字符串,而不是正则表达式. -v告诉grep要反转它的正常行为,只显示匹配的行.