gpt4 book ai didi

linux - 对流式数据的 Sed 操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:27 28 4
gpt4 key购买 nike

需要对流式数据进行sed操作

tail -f sourcefile | sed -n 's/text1/text2/p' >~/destinationfile

我尝试了上面的命令,但无法让它工作。

最佳答案

这两个程序都链接到 libc,libc 对输入/输出操作执行内部缓冲。当 stdout(!) 是终端时缓冲将基于行,但当 stdout 是管道时缓冲将基于 block 。基于 block 的缓冲使用更大的缓冲区,并且消费应用程序必须等到缓冲区被填满,或者到达流的末尾,或者程序在文件描述符上调用 flush()。但是 tailsed 都不会调用 flush()(使用默认命令行选项)。

在您的情况下,您可以看到 tail 标准输入的基于 block 的缓冲生效。发生这种情况是因为 stdout 进入管道尾部。

解决方案:您可以发出stdbuf命令来禁用tail的输入缓冲:

如果您只想在终端中查看 sed 的输出:

stdbuf -i0 tail -f /var/log/syslog | sed -n 's/CRON/cron/p'

如果您要通过管道传输到文件,现在还需要禁用 sed 的输出缓冲区!

touch output.txt
tail -f output.txt & # tail output in background in order to see
# file changes immediately

stdbuf -i0 tail -f /var/log/syslog | stdbuf -o0 sed -n 's/CRON/cron/p' > output.txt

关于linux - 对流式数据的 Sed 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21419846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com