web-dev-qa-db-ja.com

複数のコマンドでパイプを個別に解析する方法は?

各ステップで切り捨てることなく、単一のコマンドの出力を複数のコマンドで解析するにはどうすればよいですか?

例えば ​​ls -al|grep -i somethingは、「何か」が含まれているすべての行を次のパイプに渡しますが、これは、条件に一致しないため、パイプ内の他のすべての行が破棄されることも意味します。私が欲しいのは、多くのコマンドで独立して単一のパイプを操作できるようにすることです。

この場合、メッセージ本文全体を通過するMuttからのパイプです。 grep、sed、deleteを取得し、これらのそれぞれをbash変数に割り当てたいと思います。

最初に私が欲しいのは、「メッセージID」を変数に割り当て、「サブジェクト」を別の変数に割り当てることができるようにすることです。次に、それらを適切なコマンド引数に渡します。

これがどうなるか

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

明らかに、上記の行は私が望むことをしません。

これらすべてのコマンドを元のメッセージ本文で操作したいと思います。私はそれが理にかなっていると思います

2
yarun can

出力を一時ファイルに保存し、そのファイルを個々のコマンドの入力として使用できます。
コマンドに出力がない場合は、teebashプロセス置換とともに使用できます。それは次のようになります

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

ただし、出力が混在しているため、ここでは役に立ちません。ただし、コマンドを変更して出力をファイルに保存する場合を除きます。

一時ファイルを作成できない場合は、複数回処理する出力を変数に保存してから、複数回echoすることができます。

messageBody="$( MessageBodyFromMutt )"
echo "$messageBody" | command1
echo "$messageBody" | command2
echo "$messageBody" | command3
2
Volker Siegel