【问题标题】:Filter stdout using sed, write filtered output into file but keep unfiltered output on stdout (screen)使用 sed 过滤标准输出,将过滤后的输出写入文件,但在标准输出(屏幕)上保留未过滤的输出
【发布时间】:2016-12-18 04:25:15
【问题描述】:

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

我尝试了sedteeprocess substitution 的一些组合,但无法成功。

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

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

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

显然它还会删除来自stdout 的详细输出,因为tee 命令仅通过管道接收过滤后的sed 输出。

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

【问题讨论】:

标签: bash unix sed stdout


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 2011-04-25
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多