Tenho um processo em execução que gera uma linha de dados a cada segundo. Eu quero enviar toda a saída para 'output.txt', mas também linhas de saída que tenham @ para um arquivo diferente 'emails.txt'. Eu tentei algo como abaixo, mas a parte grep não funciona.
myProgrram | pee 'tee output.raw 2>&1' 'grep @ > email.txt'
Alguma ideia de como melhorar isso? Obrigado.
Aqui está uma solução:
Explicação:
stdin
é "standard in" (número do descritor de arquivo0
).stdout
é "saída padrão" (número do descritor de arquivo1
).stderr
é "erro padrão" (número do descritor de arquivo2
).2>&1
redireciona tudo o que é enviado parastderr
parastdout
.|
tubosstdout
do lado esquerdo parastdin
o lado direito.tee output.txt
faz duas coisas ao mesmo tempo:stdin
paraoutput.txt
stdin
parastdout
.|
tubosstdout
parastdin
.grep --line-buffered @
escolhe qualquer linha com@
fromstdin
e envia parastdout
.> emails.txt
escreve o que quer questdin
sejaemails.txt
.O
--line-buffered
sinalizador usagrep
buffer de linha na saída, o que pode causar uma penalidade de desempenho, mas garante que toda a saída seja impressa no arquivo.Obrigado a todos que responderam - O seguinte código funcionou