如何独立解析具有多个命令的管道?

如何独立解析具有多个命令的管道?

如何才能通过多个命令解析单个命令的输出而不在每一步都截断?

例如, 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

显然上面这一行并没有达到我想要的效果。

我希望所有这些命令都对原始邮件正文进行操作。我希望这是有意义的

答案1

您可以将输出保存到临时文件,并使用该文件作为各个命令的输入。
如果命令没有输出,您可以使用tee进程bash替换;它看起来像

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

但是由于您有混合在一起的输出,所以它在这里没有帮助 - 除非您更改命令以将输出保存到文件。

如果无法创建临时文件,则可以将要多次处理的输出保存在变量中,然后echo多次执行:

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

相关内容