Ein anderer Weg ist
{ grep ...; bzgrep ...;} >file
&&
hat die Schwierigkeit, dass die bzgrep
würde nicht ausgeführt werden, wenn grep
fehlgeschlagen.
Beachten Sie das obligatorische Leerzeichen nach der öffnenden geschweiften Klammer und das Semikolon nach dem letzten Befehl. Alternativ können Sie die Subshell-Syntax (Klammern statt geschweiften Klammern) verwenden, die nicht so wählerisch ist:
(grep ...; bzgrep ...) >file
bzgrep verwendet automatisch reguläres grep, wenn eine Datei nicht bzip-komprimiert ist. Daher sollte Folgendes ausreichen:
bzgrep [email protected] maillog *bz2 | mail -s "logs yay" [email protected]
oh natürlich auch hier ist meine obligatorische GNU Parallel Lösung:
parallel -m bzgrep [email protected] ::: maillog* *bz2 | mail -s "logs yay" [email protected]
was viel schneller sein könnte, wenn Sie viele Dateien prüfen.
Hier ist eine andere Möglichkeit, dies zu tun (vorausgesetzt, Sie führen bash aus, was wahrscheinlich der Fall ist):
cat <(bzgrep ...) <(grep ...)
Hier speist bash die Ausgabe der bzgrep- und grep-Befehle transparent in cat ein, als ob sie Dateien wären (und sie sind irgendwie unter der Haube, Details in der URL unten).
In Ihrem speziellen Fall würde ich Phils Lösung empfehlen, aber das obige ist ein guter Trick, den Sie in Ihrer Tasche behalten sollten.
Wenn Sie interessiert sind, können Sie hier mehr lesen:http://www.tldp.org/LDP/abs/html/process-sub.html