2014-05-07 19 views
8

dire che ho command1 che Risulterà:grep utilizzando l'uscita da un altro comando

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

ho anche command2 che emette questo:

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

C'è un modo per grep l'output di command1 a non includere alcuna riga corrispondente a command2, in modo che l'output finale sia simile a questo?

2b41f358-ff6d-418c-a0d3-ac7151c03b78 
7ac4995c-ff2c-4717-a2ac-e6870a5670f0 
+0

Probabilmente fattibile con 'sort' e' awk' –

+0

Sono quelle linee? Se è così, sì. – Jiminion

risposta

13

Problema questo grep

command1 | grep -vF -f <(command2) 

Qui,

-F significa partita stringa fissa *

-v significa invertito partita

-f significa che il file con Pat sterna

<(command) crea effettivamente un FIFO con quel comando e lo usa al reindirizzamento.

+0

Perfetto grazie, mi mancava la parte <(), non sapevo che potevi farlo – bruchowski

5

Per ottenere tutte le linee dall'uscita di command1 che non compaiono nell'output di command2:

grep -vFf <(command2) <(command1) 

-f dice grep di utilizzare i modelli che provengono da un file. In questo caso, quel file è l'output di command2. -F dice a grep che questi modelli devono essere trattati come stringhe fisse, non regex. -v indica a grep di invertire il suo comportamento normale e mostra solo le linee che corrispondono a non corrispondenza.

+0

Grazie John, ti ho upvoted, ma ho segnato l'altra risposta solo perché mi piace la sintassi migliore – bruchowski

Problemi correlati