Como analisar o pipe com vários comandos independentemente?

2

Como posso analisar a saída de um único comando por vários comandos sem truncar em cada etapa?

Por exemplo ls -al|grep -i something passará todas as linhas que tiverem "alguma coisa" para o próximo canal, o que é bom, mas isso também significa que todas as outras linhas do tubo serão descartadas, pois não haverá correspondência com a condição. O que eu quero é poder operar em um único pipe por muitos comandos independentemente.

Neste caso, um pipe de Mutt que passa todo o corpo da mensagem. Eu quero pegar grep, sed, deletar e atribuir cada um desses para bash variáveis talvez.

Inicialmente, o que eu quero é poder atribuir "id de mensagem" a uma variável, "assunto" a outra variável, etc. Em seguida, passá-los para argumentos de comandos adequados.

Aqui está como será

MessageBodyFromMutt|grep something -Ax -Bx |grep another thing from the original message| sed some stuff from the original message| cut from here to there

Obviamente, a linha acima não faz o que eu quero.

Eu quero que todos esses comandos operem no corpo da mensagem original. Espero que faça sentido

    
por yarun can 29.05.2014 / 17:55

1 resposta

1

Você pode salvar a saída em um arquivo remoto e usar esse arquivo como entrada para os comandos individuais.
Se os comandos não tiverem saída, você poderá usar tee with bash process substitution; ficaria parecido com

MessageBodyFromMutt | tee >( command1 ) >( command2 ) >( command3 )

Mas você tem saída, que seria misturada, então não ajuda aqui - exceto se você alterar os comandos para salvar a saída em arquivos ou algo assim.

Se você não quiser criar um arquivo temporário, salve a saída que deseja processar várias vezes em uma variável e, em seguida, echo várias vezes:

messageBody="$( MessageBodyFromMutt )"
echo "$messageBody" | command1
echo "$messageBody" | command2
echo "$messageBody" | command3
    
por 20.08.2014 / 23:29