如何使用Python裁剪命令终端输出字符串提取目标IPv6地址
字符串裁剪最优方案
针对这类线缆调制解调器(CM)的终端状态输出,基于内容特征的正则匹配是最优解,比按行号截取、固定字符位切片的容错率高得多——毕竟不同设备固件版本的列宽、排版可能有微调,靠位置取数很容易出问题。
不同环境的实现代码
- Shell 命令行场景(直接对接命令输出最方便):
用grep做正则提取即可,执行命令:
参数说明:# 可直接接在原查询命令的管道后,不需要先存文件 原cm状态查询命令 | grep -Eo '2400:[0-9a-fA-F:]+'-E开启扩展正则支持,-o参数设置为仅输出匹配到的字符串片段,正则规则锁定以2400开头、由十六进制字符和冒号组成的IPv6地址段,不会误匹配其他行的MAC、状态值、统计信息。 - Python 脚本处理场景:
用标准库re即可完成提取,示例:import re # raw_text 存储终端返回的原始字符串 raw_text = """MAC Address IP Address US DS MAC Prim RxPwr Timing Num BPI Intf Intf Status Sid (dBmv) Offset CPEs Enb
eca4.4051.3018 0.0.0.0 11/1.0w* 0/0/18* online(pt) 1432 2.5 2444 1 yes
2400:6cec:400:9:eea9:40ff:fe51:3018
online cm 1 ; offline cm 0 ; ranging cm 0"""
target_ip = re.search(r"2400:[0-9a-fA-F:]+", raw_text).group()
## 方案验证 用给出的示例输出测试,上述两种写法都能精准返回目标值:*2400:6cec:400:9:eea9:40ff:fe51:3018*,没有冗余字符。 > 注意:如果你的网络环境IPv6前缀不是固定2400开头,可以把正则替换为通用IPv6匹配规则`([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}`,适配所有全局单播IPv6地址提取场景。 内容的提问来源于stack exchange,提问作者bgardne7
相关产品推荐
相关产品推荐

