如何从管道 linux 命令连续将输出发送到文件? [复制]

Posted

技术标签:

【中文标题】如何从管道 linux 命令连续将输出发送到文件? [复制]【英文标题】:How to send output to a file continuously from a piped linux command? [duplicate] 【发布时间】:2017-11-27 13:58:20 【问题描述】:

以下命令每秒生成输出,持续 60 秒。

sar -n DEV  1 60 | grep lo

如果我将其重定向到一个文件,则文件 sar.log 会不断更新,即每秒更新一次

sar -n DEV  1 60 > sar.log &

但是,一旦通过管道将其重定向到文件,它只会在完成后(即 60 秒后)填充文件 sar.log。

sar -n DEV 1 60 | grep lo > sar.log &

我如何 grep 并重定向到一个文件,以便日志文件不断更新,即每秒

如果它符合我选择某些内容并每秒重定向到一个文件的目的,我可以使用除 grep 之外的其他内容。

【问题讨论】:

【参考方案1】:

使用 GNU grep:添加选项 --line-buffered 以在输出中使用行缓冲。这可能会导致性能下降。

【讨论】:

【参考方案2】:

我发现How to 'grep' a continuous stream?也是一个很好的答案。

sar -n DEV 1 10 | stdbuf -o0 grep lo > sar.log &

【讨论】:

以上是关于如何从管道 linux 命令连续将输出发送到文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux学习输入输出重定向和管道功能cat命令more命令

linux中的管道符重定向于环境变量

linux文件命令2

Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)

Linux之选取信息命令介绍与应用20170331

Linux中常用命令pipe