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
指定输出流应该是行缓冲的。
我有一个不断更新的日志文件 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
指定输出流应该是行缓冲的。