Regex 跟踪日志文件并仅显示特定值

Regex 跟踪日志文件并仅显示特定值,regex,shell,unix,tail,Regex,Shell,Unix,Tail,我目前正在使用 tail -f my_log_file 日志文件中添加的每一行如下所示: blaaa blaaa something blaa blaa response_time 100ms blaa blaaaaa blaaa blaaa something blaa blaa response_time 150ms blaa blaaaaa blaaa blaaa something blaa blaa response_time 90ms blaa blaaaaa 我真正想要的是能够

我目前正在使用

tail -f my_log_file
日志文件中添加的每一行如下所示:

blaaa blaaa something blaa blaa response_time 100ms blaa blaaaaa
blaaa blaaa something blaa blaa response_time 150ms blaa blaaaaa
blaaa blaaa something blaa blaa response_time 90ms blaa blaaaaa
我真正想要的是能够跟踪这个日志文件,但只显示

response_time 100ms
response_time 150ms
response_time 90ms
有没有办法用“尾巴”做到这一点?
谢谢

您可以通过管道将
tail
的输出通过
sed
grep
进行过滤。尝试:

tail -f my_log_file | sed -e 's/.*\(response_time \S\+\).*/\1/p'

这应该适合您:

tail -f my_log_file | grep -o 'response_time [0-9]+ms'

-u是输入/输出的流版本工作到第一个EOF(因此使用
echo>>我的日志文件的脚本添加到文件末尾,但每个操作都有一个EOF,从而停止sed,tail将等待来自外部的中断)

是否可以将这些值进行聚合并创建平均值?您可能希望对
sed
使用选项
-u
,使其成为无缓冲输出。那
tail-f
可能会使输出速度变慢,所以缓冲就没那么好了。@Alfe:根据我的经验,
tail
在读取EOF时会刷新输出。是的,
tail
会,而
sed
如果且仅当您要求它:)问题是
tail
在使用选项
-f
时将永远不会关闭其输出(从而轻推
sed
以刷新所有内容)。因此,最好告诉
sed
定期刷新。您可能希望在
grep
中添加选项
--line buffered
,以避免输出延迟。
sed -u 's/.* \(response_time [0-9]\{1,\}ms\) .*/\1/" my_log_file