Au moment où j'écris ceci, la syntaxe de la réponse acceptée était incorrecte pour la plupart, sinon la totalité, des shells dérivés de Bourne, y compris bash
. J'ai suggéré une modification en haut et accepté la réponse pour résoudre ce problème, mais j'étais également enclin à ajouter toutes ces autres informations, et cela aurait plutôt été une réécriture plutôt qu'une modification.
Vous pouvez utiliser des commandes composées:
{ grep ...; bzgrep ...; } >file
..ou sous-coques (notez les parenthèses au lieu des accolades):
(grep ...; bzgrep ...) >file
..pour regrouper les commandes. La méthode du sous-shell a une syntaxe plus agréable (plus tolérante au manque d'espace blanc et vous permet d'omettre le dernier point-virgule), mais elle bifurque un nouveau processus ou "fait semblant" en exécutant les commandes dans un environnement nettoyé. Les deux ont des avantages en fonction de ce que vous voulez faire, ce qui n'a pas d'importance ici, mais valent la peine d'être recherchés si vous voulez plus de compétences avec le shell.
Remarque: Vous pouvez également utiliser le pipelining avec ces astuces, vous pouvez donc faire quelque chose comme ceci:
{ grep ...; bzgrep ...; } | less
PS si vous ne se soucient pas de l'ordre des matches de votre production combinée, vous pouvez utiliser un seul &
entre les deux commandes, comme suit: { grep ... & bzgrep ...; }
. Ensuite, les deux commandes s'exécutent simultanément: le grep
se lance et le shell le met en arrière-plan, puis le shell exécutera le bzgrep
. (Mais il y a une petite mise en garde avec cela, l'explication impliquant la redirection de fichiers et la mise en mémoire tampon du flux de fichiers pouvant entraîner une très petite fraction des lignes dans le fichier de sortie à diviser / modifier: si vous verriez cela dépendrait de la façon dont votre grep
, bzgrep
et les libc
stdio.h
fonctions sont implémentées. Dans la plupart des implémentations, je pense que le fait de canaliser la commande avant de rediriger vers un fichier évitera le problème, vous pouvez donc faire { foo & bar; } | cat - >file
comme solution de contournement.)