Otra forma es
{ grep ...; bzgrep ...;} >file
&&
tiene la dificultad de que el bzgrep
no se ejecutaría si grep
fallado.
Tenga en cuenta el espacio obligatorio después de la llave de apertura y el punto y coma después del último comando. Alternativamente, puede usar la sintaxis de la subcapa (paréntesis en lugar de llaves), que no es tan exigente:
(grep ...; bzgrep ...) >file
bzgrep cambia automáticamente a grep regular si un archivo no está comprimido con bzip. Por lo tanto, lo siguiente debería ser suficiente:
bzgrep [email protected] maillog *bz2 | mail -s "logs yay" [email protected]
oh, también, por supuesto, aquí está mi solución GNU Parallel obligatoria también:
parallel -m bzgrep [email protected] ::: maillog* *bz2 | mail -s "logs yay" [email protected]
lo que podría ser mucho más rápido si está revisando muchos archivos.
Aquí hay otra forma de hacerlo (asumiendo que está ejecutando bash, que probablemente es así):
cat <(bzgrep ...) <(grep ...)
Aquí bash está alimentando de forma transparente la salida de los comandos bzgrep y grep a cat como si fueran archivos (y están debajo del capó, los detalles en la URL en la parte inferior).
En tu caso particular, recomendaría la solución de Phil, pero la anterior es un buen truco para tener en tu bolso.
Si está interesado, puede leer más aquí:http://www.tldp.org/LDP/abs/html/process-sub.html