Une autre façon est
{ grep ...; bzgrep ...;} >file
&&
a la difficulté que le bzgrep
ne serait pas exécuté si le grep
échoué.
Notez l'espace obligatoire après l'accolade ouvrante et le point-virgule après la dernière commande. Alternativement, vous pouvez utiliser la syntaxe du sous-shell (parenthèses au lieu d'accolades), qui n'est pas aussi difficile :
(grep ...; bzgrep ...) >file
bzgrep utilise automatiquement par défaut grep normal si un fichier n'est pas compressé par bzip. Ainsi, ce qui suit devrait suffire :
bzgrep [email protected] maillog *bz2 | mail -s "logs yay" [email protected]
oh bien sûr, voici aussi ma solution GNU Parallel obligatoire :
parallel -m bzgrep [email protected] ::: maillog* *bz2 | mail -s "logs yay" [email protected]
ce qui pourrait être beaucoup plus rapide si vous vérifiez beaucoup de fichiers.
Voici une autre façon de procéder (en supposant que vous utilisez bash, ce que vous faites probablement) :
cat <(bzgrep ...) <(grep ...)
Ici, bash alimente de manière transparente la sortie des commandes bzgrep et grep dans cat comme s'il s'agissait de fichiers (et ils sont en quelque sorte sous le capot, les détails dans l'url en bas).
Dans votre cas particulier, je recommanderais la solution de Phil, mais ce qui précède est une bonne astuce à garder dans votre sac.
Si vous êtes intéressé, vous pouvez en savoir plus ici :http://www.tldp.org/LDP/abs/html/process-sub.html