【问题标题】:Duplicate command output, print un-post-treated copy to stdout and store post-treated copy into a file [duplicate]复制命令输出,将未经处理的副本打印到标准输出并将处理后的副本存储到文件中[重复]
【发布时间】:2021-12-30 09:18:02
【问题描述】:

我正在尝试复制命令的输出,因此我对一个流应用后处理,然后将其存储到一个文件中,同时在标准输出上打印原始输出。

我能想到的最接近的是:

command | tee /dev/stdout | sed 's/foo/bar/g' > out.txt

这不起作用,因为 > 捕获了两个输出。

如果可能,我想避免使用临时文件。有什么线索吗?

【问题讨论】:

标签: bash unix pipe tee


【解决方案1】:

试试

command | tee >(sed 's/foo/bar/g' > out.txt)

有关>(...) 的解释,请参阅ProcessSubstitution - Greg's Wiki。简而言之,它会导致tee 写入一个路径,该路径将写入的数据作为sed 's/foo/bar/g' > out.txt 命令的输入进行管道传输。

【讨论】:

  • 太棒了! 10 年编程经验,从未使用过流程替代...