我想从python中的设备发现中提取mac地址。每个设备发现将返回设备的mac地址,并提取每个设备的mac地址。每个设备的mac地址都是唯一的,我只需要提取mac地址部分并删除其他部分即可。
我用下面的python代码发送路由器命令
show chassis mac-addresses | match "Private base"
router命令将在路由器终端中返回如下所示的输出
Private base address 00:1c:95:b9:e7:f0
{master}
只有几行字符串需要删除,而只是提取mac地址。
这是我用来在python中发送命令的代码
output_mac = connection.send_command('show chassis mac-addresses | match
"Private base"')
print("router_mac1: " + re.sub('\{|master|\:|0|\}|\\n','',output_mac))
结果输出如下
router_mac: Private base address 1db5d9e7f
在输出中有很多空间,缺少'0'和':'。 我只想获取mac地址,例如,这里仅00:1c:95:b9:e7:f0 我可以知道如何正确提取每个设备的mac地址。感谢您的帮助和友善的支持。谢谢
我希望每个设备的输出如下
router_mac1:00:1c:95:b9:e7:f0
router_mac2:00:3b:25:c6:f3:d0
根据示例,我尝试了
print("router_mac: " + re.findall(r'.([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]
{2})',output_mac))
但是我得到了错误返回
print("router_mac: " + re.findall(r'([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]
{2})',output_mac))
TypeError: must be str, not list
嗨,
我尝试对Mac地址使用正则表达式,如下所示;
re1='.*?'
re2='((?:[0-9A-F][0-9A-F]:){5}(?:[0-9A-F][0-9A-F]))(?![:0-9A-F])'
rg=re.compile(re1+re2,re.IGNORECASE|re.DOTALL)
m = rg.search(output3)
if m:
mac1 = m.group(1)
print("router_mac1: " + mac1 + "\n")
它返回mac地址,但还在下面创建新的空行
hostname: XC1-rtr-bkg
router_mac1: 00:1c:95:b9:e7:f0
model_type: T320
应该是
hostname: XC1-rtr-bkg
router_mac1: 00:1c:95:b9:e7:f0
model_type: XXX
如何删除上面多余的行?谢谢
我删除了\ n