0

有人可以帮助我吗,我是编程初学者,我的问题是输出我只想过滤mac地址。我该怎么做。

from netmiko import ConnectHandler

cisco = {
        'device_type' : 'cisco_ios',
        'host' : '192.168.X.Y',
        'username' : 'foo',
        'password' : '123',
}

net_connect = ConnectHandler(**cisco)
net_connect.find_prompt()
show_mac = net_connect.send_command("show mac address-table vlan 100")
print(show_mac)

输出 :

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
 100    264b.edf4.eba2    DYNAMIC     Gi0/3
 100    2680.f1ee.c0b1    DYNAMIC     Gi0/2
 100    3a60.2954.1ee2    DYNAMIC     Gi1/3
 100    4a60.05bd.27fc    DYNAMIC     Gi1/2
 100    7e02.eee8.0291    DYNAMIC     Gi0/1
 100    b689.d44e.afd1    DYNAMIC     Gi1/0
 100    d207.6258.5966    DYNAMIC     Gi1/1
Total Mac Addresses for this criterion: 7
4

1 回答 1

0

您可以在此处使用正则表达式。正则表达式允许您匹配某个文本结构。举个例子:

像 'hello\d{1,3}' 这样的正则表达式可以匹配像 'hello12' 或 'hello432' 这样的字符串。

您可以匹配文字字符以及像\d这样的占位符来匹配任何数字值,包括重复。 {1,3} = 1 到 3 次重复。在这种情况下,您需要字母数字值,它可以与python 中的\w匹配。

^ = 后面的字符必须在行首。

$ = 前面的字符必须在行尾。

. = 每个字符都匹配

+ = 匹配前一个字符/组至少一次或多次。这是一个贪婪的运算符,所以在玩的时候检查你的正则表达式。

由于您只需要匹配行的一部分,因此可以使用捕获组。捕获组使匹配中的子字符串可以单独访问。只需在希望的部分周围加上括号 ()。

Python为此有一个正则表达式模块,所以这里有一些示例代码:

import re

def your_func():
    mac_addresses = []
    for line in show_mac.split('\n'):  # split the above string in lines
        line = line.strip()  # remove leading and trailing spaces
        pattern = re.compile(r'^\d+\s+(\w{1,4}\.\w{1,4}\.\w{1,4})\s+\w+\s+.+$')
        # match a regex to a string from the beginning
        match = re.match(pattern, line)
        # python match object contains our capture group. first group is at index 1, index 0 is the whole match
        if match and match[1]:
            mac_addresses.append(match[1])

    print(mac_addresses)

于 2020-05-26T21:07:05.107 回答