需要sed对流数据进行操作
tail -f sourcefile | sed -n 's/text1/text2/p' >~/destinationfile
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的命令,但无法让它工作。
这两个程序都与 libc 相关联,并且 libc 对输入/输出操作执行内部缓冲。当 stdout(!) 是终端时缓冲将基于行,而当 stdout 是管道时缓冲将基于块。基于块的缓冲使用更大的缓冲区,并且消费应用程序必须等到缓冲区被填满,或者到达流的末尾或程序调用flush()文件描述符。但是既不调用tail也不sed调用flush()(使用默认命令行选项)。
在您的情况下,您可以看到基于块的尾部标准输入缓冲有效。发生这种情况是因为 stdout 进入管道到尾。
解决方案:您可以发出stdbuf命令禁用tail的输入缓冲:
如果您只想在终端中查看 sed 的输出:
stdbuf -i0 tail -f /var/log/syslog | sed -n 's/CRON/cron/p'
Run Code Online (Sandbox Code Playgroud)
如果您正在通过管道传输到文件 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |