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