Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

grep using output from another command

Say I have command1 which outputs this:

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

I also have command2 which outputs this:

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

Is there a way to grep the output from command1 to not include any lines matched from command2, so that the final output would look like this?

2b41f358-ff6d-418c-a0d3-ac7151c03b78
7ac4995c-ff2c-4717-a2ac-e6870a5670f0
like image 409
bruchowski Avatar asked May 07 '14 04:05

bruchowski


2 Answers

Issue this grep

command1 | grep -vF -f <(command2)

Here,

-F means Fixed string match*

-v means invert match

-f means the file with patterns

<(command) actually creates a FIFO with that command and use it on redirection.

like image 58
Shiplu Mokaddim Avatar answered Oct 05 '22 17:10

Shiplu Mokaddim


To get all the lines from the output of command1 that do not appear in the output of command2:

grep -vFf <(command2) <(command1)

-f tells grep to use patterns that come from a file. In this case, that file is the output of command2. -F tells grep that those patterns are to be treated as fixed strings, not regex. -v tells grep to invert its normal behavior and just show lines the lines that do not match.

like image 35
John1024 Avatar answered Oct 05 '22 19:10

John1024