gpt4 book ai didi

linux - 在 CLI 程序之间通过管道传输输出时出现缓冲问题

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

我正在尝试通过几个过滤器来追踪 apache 错误日志。

这非常有效:

tail -fn0 /var/log/apache2/error.log | egrep -v "PHP Notice|File does not exist"

但是输出中有一些文字“\n”,我想用实际的新行替换,所以我通过管道输入 perl:

tail -fn0 /var/log/apache2/error.log | egrep -v "PHP Notice|File does not exist" | perl -ne 's/\\n/\n/g; print"$_"'

这似乎有一些缓存问题(第一页命中没有产生任何结果,第二页命中并且出现了两份调试信息),它似乎也有点喜怒无常。

所以我尝试了 sed:

tail -fn0 /var/log/apache2/error.log | egrep -v "PHP Notice|File does not exist" | sed 's/\\n/\n/g'

似乎遇到了同样的问题。

最佳答案

正确,当您使用大多数程序来归档或通过管道传输时,它们会缓冲输出。在某些情况下您可以控制它:GNU grep 系列接受 --line-buffered 选项,专门用于像这样的管道。此外,在 Perl 中,您可以使用 $| = 1; 效果相同。 (据我所知,sed 没有任何此类选项。)

缓冲的是管道开头或中间的内容,而不是结尾(它正在与您的终端通信,因此它将被行缓冲)所以您想使用 egrep --line-buffered

关于linux - 在 CLI 程序之间通过管道传输输出时出现缓冲问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503084/

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