No momento da minha escrita, a sintaxe da resposta aceita estava errada para a maioria, se não todas, shells derivadas de Bourne, incluindo bash
. Eu sugeri uma edição para o topo e aceitei uma resposta para corrigir isso, mas também estava inclinado a adicionar todas essas outras informações, e isso seria mais uma reescrita do que uma edição.
Você pode usar comandos compostos:
{ grep ...; bzgrep ...; } >file
.. ou subshells (observe os parênteses em vez de chaves):
(grep ...; bzgrep ...) >file
.. para agrupar os comandos. O modo subshell tem uma sintaxe mais agradável (perdoa mais a falta de espaço em branco e permite omitir o último ponto e vírgula), mas ele bifurca um novo processo ou "finge" fazer com que os comandos sejam executados em um ambiente limpo. Ambos têm vantagens dependendo do que você quer fazer, o que não importa aqui, mas vale a pena procurar se você quer mais proficiência com o shell.
Observação: você também pode usar o pipelining com esses truques para fazer algo assim:
{ grep ...; bzgrep ...; } | less
P.S. Se você não se importar com a ordenação das correspondências em sua saída combinada, você poderia usar um único &
entre os dois comandos, assim: { grep ... & bzgrep ...; }
. Então os dois comandos são executados simultaneamente: o grep
é iniciado eo shell o coloca em segundo plano, então o shell executará o bzgrep
. (Mas há uma pequena ressalva com isso, com a explicação envolvendo o redirecionamento de arquivos e buffer de fluxo de arquivos potencialmente fazendo com que uma porção muito pequena das linhas no arquivo de saída seja dividida / desconfigurada: se você veria isso dependeria de como sua grep
, bzgrep
e libc
stdio.h
funções são implementadas.Na maioria das implementações, acredito que canalizar o comando antes de redirecionar para um arquivo evitará o problema, portanto, você pode fazer { foo & bar; } | cat - >file
como uma solução alternativa. / p>