复制命令输出,将未经 post 处理的副本打印到标准输出并将 post 处理的副本存储到文件中

Duplicate command output, print un-post-treated copy to stdout and store post-treated copy into a file

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

我能想到的最接近的是:

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

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

我希望尽可能避免使用临时文件。有什么线索吗?

尝试

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

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