求更简洁的正则表达式提取Cisco设备序列号
从Cisco设备
show inventory输出中提取序列号的简洁正则表达式方案 需求背景
需要从Cisco设备的show inventory输出中提取设备序列号,现有正则表达式r'PID: \S+\s+, VID:\s+\S+\s+, SN: (\S+)'可正常工作,寻求更简洁的实现方案。
示例输出
switch-01#sh inventory NAME c93xx Stack, DESCR c93xx Stack PID C9300-48P , VID V02 , SN **ABC1979G123** NAME Switch 1, DESCR C9300-48P PID C9300-48P , VID V02 , SN ABC1979G123 NAME Switch 1 - Power Supply A, DESCR Switch 1 - Power Supply A PID PWR-C1-715WAC-P , VID V01 , SN POW1978ST01 NAME Switch 1 - Power Supply B, DESCR Switch 1 - Power Supply B PID PWR-C1-715WAC-P , VID V01 , SN POW1978ST02 NAME Switch 1 FRU Uplink Module 1, DESCR 4x1G Uplink Module PID C9300-NM-4G , VID V01 , SN FUM2023CIOC NAME Gi111, DESCR 1000BaseSX SFP PID GLC-SX-MMD , VID V01 , SN GBIC2020C01 NAME Gi112, DESCR 1000BaseSX SFP PID GLC-SX-MMD , VID V01 , SN GBIC2020C02 switch-01#
简化正则方案推荐
以下是几种更简洁且有效的正则表达式,可根据实际需求选择:
方案1:最极简实现
r'SN\s+(\S+)'直接匹配
SN后跟随的非空白字符序列(即序列号),代码最短,执行效率最高。适用于确认show inventory输出中仅设备条目行包含SN字段的场景。方案2:带上下文校验的实现
r'PID.*SN\s+(\S+)'通过
PID字段限定仅匹配设备条目行,避免潜在的非目标SN字符串干扰,兼顾简洁性与鲁棒性。方案3:精准匹配字段结构的实现
r'PID\s+\S+\s*,\s*VID\s+\S+\s*,\s*SN\s+(\S+)'严格匹配PID、VID、SN的字段分隔结构,用
\s*适配字段间任意数量的空格,兼容不同Cisco设备的输出格式差异,同时比原正则更简洁。
内容的提问来源于stack exchange,提问作者Network Cool
相关产品推荐
相关产品推荐

