Dalším způsobem je
{ grep ...; bzgrep ...;} >file
&&
má potíže s bzgrep
nespustí se, pokud grep
selhalo.
Všimněte si povinné mezery za úvodní složenou závorkou a středníkem za posledním příkazem. Případně můžete použít syntaxi subshell (závorky místo složených závorek), což není tak náročné:
(grep ...; bzgrep ...) >file
bzgrep se automaticky nastaví na běžný grep, pokud soubor není komprimovaný bzip. Mělo by tedy stačit následující:
bzgrep [email protected] maillog *bz2 | mail -s "logs yay" [email protected]
a samozřejmě zde je také moje povinné řešení GNU Parallel:
parallel -m bzgrep [email protected] ::: maillog* *bz2 | mail -s "logs yay" [email protected]
což by mohlo být mnohem rychlejší, pokud kontrolujete hodně souborů.
Zde je další způsob, jak to udělat (za předpokladu, že používáte bash, což pravděpodobně máte):
cat <(bzgrep ...) <(grep ...)
Bash zde transparentně dodává výstup příkazů bzgrep a grep do cat, jako by to byly soubory (a jsou tak trochu pod pokličkou, podrobnosti v url dole).
Ve vašem konkrétním případě bych doporučil Philovo řešení, ale výše uvedené je dobrý trik, který byste měli mít v tašce.
Pokud máte zájem, můžete si přečíst více zde:http://www.tldp.org/LDP/abs/html/process-sub.html