如何将输出从sed命令重定向到文件

时间:2019-01-23 11:34:49

标签: sed

我有一个日志,该日志在要获取的字符串旁边的行中产生大量文本。基本上它包含以下内容:

Render camera: $Camera001 outputfile: "test.jpg" outputsize:[1920,1080] vfb:off outputHDRbitmap: true 

我有个大命令:

bla bla bla packet 12 out of 432 bla bla

我想将输出重定向到文件。

为什么tail -f log.txt |grep --line-buffered "packet" |sed -n 's/.*\(packet [0-9]* out of [0-9]*\).*/\1/p' |while read log; do echo "$(date +%F_%H:%m:%S:%N) $log" ; done 不起作用?我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

此问题的原因是sed命令将输出数据保存在缓冲区中。通过使用--line-buffered参数,对下一个管道sed命令帮助使用-u参数,可以避免grep命令(管道链中的第二个)出现数据同步问题。该命令应为:

tail -f log.txt | grep --line-buffered "packet" | sed -n -u 's/.*\(packet [0-9]* out of [0-9]*\).*/\1/p' | while read log; do echo "$(date +%F_%H:%m:%S:%N) $log" >> outputfile.log ; done

sed -n -u 's /。([0-9] 中的数据包[0-9] )。 / \ 1 / p'

代替

sed -n's /。([0-9] 中的数据包[0-9] )。 / \ 1 / p'

通过此更改,重定向到文件应该可以工作。