使用sed过滤stdout,将过滤后的输出写入文件,但在stdout上保留未过滤的输出(屏幕)

时间:2016-08-11 12:19:15

标签: bash unix sed stdout

我想将给定命令(rsync)的一些过滤输出写入文件,但在stdout(屏幕/终端)上保留完整的未过滤输出。

我已尝试过sedtee&的某些组合。 process substitution但无法使其发挥作用。

这是我到目前为止所得到的:

rsync -aAXz --stats -v src dest > >(sed '0,/^$/d' | tee -a "summary.log")

sed '0,/^$/d'删除第一个空白行之前的所有内容,该行留下rsync的摘要并删除前导详细输出。这是按预期工作的,只会将摘要打印到summary.log

显然它也会删除stdout的详细输出,因为tee命令只接收管道上的过滤后的sed输出。

如何在使用stdout过滤之前写入sed以查看屏幕/终端上的所有详细输出?

1 个答案:

答案 0 :(得分:0)

要将stdout的完整输出写入日志文件,请先执行此操作(使用tee),然后再处理终端。像这样:

rsync -aAXz --stats -v src dest | tee -a "summary.log" | sed '0,/^$/d'

“拆分”或复制输出流,整个流的一个副本由tee转移到输出日志,另一个副本发送到其stdout,这将成为输入到sed ....