Un altro modo è
{ grep ...; bzgrep ...;} >file
&&
ha la difficoltà che il bzgrep
non verrebbe eseguito se grep
fallito.
Nota lo spazio obbligatorio dopo la parentesi graffa di apertura e il punto e virgola dopo l'ultimo comando. In alternativa, puoi usare la sintassi della subshell (parentesi invece di parentesi graffe), che non è così esigente:
(grep ...; bzgrep ...) >file
bzgrep assume automaticamente il valore predefinito normale grep se un file non è compresso con bzip. Quindi quanto segue dovrebbe essere sufficiente:
bzgrep [email protected] maillog *bz2 | mail -s "logs yay" [email protected]
oh ovviamente ecco anche la mia soluzione GNU Parallel obbligatoria:
parallel -m bzgrep [email protected] ::: maillog* *bz2 | mail -s "logs yay" [email protected]
che potrebbe essere molto più veloce se stai controllando molti file.
Ecco un altro modo per farlo (supponendo che tu stia eseguendo bash, cosa che probabilmente stai facendo):
cat <(bzgrep ...) <(grep ...)
Qui bash invia in modo trasparente l'output dei comandi bzgrep e grep in cat come se fossero file (e in un certo senso sono sotto il cofano, i dettagli nell'url in fondo).
Nel tuo caso particolare consiglierei la soluzione di Phil, ma quanto sopra è un buon trucco da tenere nella borsa.
Se sei interessato, puoi leggere di più qui:http://www.tldp.org/LDP/abs/html/process-sub.html