如何使用正则表达式从日志文件中提取时间戳和snr数值
日志提取正则表达式方案
核心正则
直接使用带捕获组的正则即可同时提取时间戳和snr键值对:^(\d{2}:\d{2}:\d{2}\.\d{6}).*?(snr=-?\d{1,3}\.\d)
规则说明
- 第一个捕获组
(\d{2}:\d{2}:\d{2}\.\d{6})精准匹配日志开头的时:分:秒.微秒格式时间戳 - 中间
.*?为非贪婪匹配,跳过时间戳和snr字段之间的所有日志内容 - 第二个捕获组
(snr=-?\d{1,3}\.\d)匹配snr键值对:-?兼容正负值,\d{1,3}匹配1-3位整数部分(覆盖-999~999的取值范围),\.\d匹配小数点后1位小数,完全符合要求的snr格式
常用工具使用示例
1. Linux命令行(GNU Grep)
执行以下命令直接输出你需要的格式:
grep -oP '^(\d{2}:\d{2}:\d{2}\.\d{6}).*?(snr=-?\d{1,3}\.\d)' 你的日志文件路径 | sed 's/ .*snr/ snr/'
2. Python代码
import re # 读取日志内容 with open("你的日志文件路径", "r", encoding="utf-8") as f: log = f.read() pattern = re.compile(r"^(\d{2}:\d{2}:\d{2}\.\d{6}).*?(snr=-?\d{1,3}\.\d)", re.M) for ts, snr in pattern.findall(log): print(f"{ts} {snr}")
输出效果
针对你提供的示例日志,输出结果如下:
04:26:24.664149 snr=13.2 04:26:24.666220 snr=-4.3 04:26:24.667305 snr=15.4
内容的提问来源于stack exchange,提问作者Todd Murray
相关产品推荐
相关产品推荐

