简体   繁体   中英

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

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM