Linux bash: 从流中 grep 并写入文件

Linux bash: grep from stream and write to file

我有一个不断更新的日志文件 A(但它已更新),我需要不断过滤它的内容并写入持久文件。

TL;DR 我需要:

tail -f A.log | grep "keyword" >> B.log

但是此命令不会向 B.log 写入任何内容。

研究只给我带来了复杂的东西,而我的情况并非如此。我的猜测是我遗漏了一些简单的概念。

这与标记为 possible duplicate 的问题不同,因为 grep 有效,如果我不尝试将其写入文件,我会输出它。问题出在文件上。

如果只是 grep,没有写入文件,工作,你遇到了缓冲 "problem"。 I/O 缓冲,除非由程序手动实现,否则将由 libc 处理。如果程序的标准输出是 termial,缓冲将基于行。如果不是,则 libc 缓冲输出,直到缓冲区达到大小限制。

在 Linux 上,意味着 glibc 您可以使用 stdbuf 命令来配置缓冲:

tail -f A.log | stdbuf -oL grep "keyword" >> B.log

-oL 指定输出流应该是行缓冲的。