grep using output from another command

22,387

Solution 1

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.

Solution 2

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.

Share:
22,387
bruchowski
Author by

bruchowski

Updated on July 09, 2022

Comments

  • bruchowski
    bruchowski almost 2 years

    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
    
  • bruchowski
    bruchowski almost 10 years
    Perfect thanks, I was missing the <() part, didn't know you could do that