我需要从一组相关命令中提取MAC id。
从第一个命令开始,在第二个命令中应用括号eth-1(2-04)中的值(2,4),以从第二个命令的输出中提取MAC。
如何提取与第二个命令输出中的2 4在同一行中的MAC id?
s1 = '''100 int-maint debug(2-02) eth-10(2-00) maint(4-03)
101 bear-test eth-1(2-04) eth-2(2-07)
102 int-test eth-4(2-06) eth-7(2-05) eth-8(2-03) eth-9(2-01) gig-3(2-08) eth-3(4-02) eth-5(4-00) eth-6(4-01) gig-1(4-08) gig-2(4-10) poe-1(4-04) poe-2(4-05) poe-3(4-06) poe-4(4-07)
'''
# output of second command
r2 = '''
2 4 101 00:80:a3:bf:72:d4 5
2 10 101 00:e0:4b:52:56:56 7
2 10 100 02:00:00:64:00:00 7
2 10 102 02:00:00:66:00:00 6
2 0 100 94:10:3e:b9:4f:5c 2
Switch Port FID MAC-Address Aging
4 3 100 56:1a:5e:a2:4a:73 7
'''
import re
s1o = (next((x for x in s1.split() if 'eth-1(2-04)' in x), None))
print(s1o)
print(r2.split())到目前为止,我已经得到了输出(如下所示)。我不确定split()是否是分解它以提取这个值00:80:a3:bf:72:d4的最佳方法
eth-1(2-04)
['2', '4', '101', '00:80:a3:bf:72:d4', '5', '2', '10', '101', '00:e0:4b:52:56:56', '7', '2', '10', '100', '02:00:00:64:00:00', '7', '2', '10', '102', '02:00:00:66:00:00', '6', '2', '0', '100', '94:10:3e:b9:4f:5c', '2', 'Switch', 'Port', 'FID', 'MAC-Address', 'Aging', '4', '3', '100', '56:1a:5e:a2:4a:73', '7']预期结果: 00:80:a3:bf:72:d4
发布于 2019-03-29 15:38:32
我也是python初学者,我认为这段代码对你有帮助。
101 bear-test eth-1(2-04) eth-2(2-07)
102 int-test eth-4(2-06) eth-7(2-05) eth-8(2-03) eth-9(2-01) gig-3(2-08) eth-3(4-02) eth-5(4-00) eth-6(4-01) gig-1(4-08) gig-2(4-10) poe-1(4-04) poe-2(4-05) poe-3(4-06) poe-4(4-07)
'''
# output of second command
r2 = '''
2 4 101 00:80:a3:bf:72:d4 5
2 10 101 00:e0:4b:52:56:56 7
2 10 100 02:00:00:64:00:00 7
2 10 102 02:00:00:66:00:00 6
2 0 100 94:10:3e:b9:4f:5c 2
Switch Port FID MAC-Address Aging
4 3 100 56:1a:5e:a2:4a:73 7
'''
import re
s1o = (next((x for x in s1.split() if 'eth-1(2-04)' in x), None))
print(s1o)
base_list=(r2.split())
base_str=",".join(base_list)
pattren=r"(\w{2}):(\w{2}):(\w{2}):(\w{2}):(\w{2}):(\w{2})"
all_mac=re.findall(pattren,base_str)
print(all_mac)
print('###########################################')
for i in all_mac:
result=re.sub(",",":",str(i))
print(result)发布于 2019-03-29 15:29:25
对于第一个命令,您可以应用此模式eth-1\((\d)-0(\d)
eth-1\( =逐字匹配eth-1(
(\d) -匹配数字并将其存储在第一个captruing组中
-0 -逐字匹配-0,
(\d) -匹配数字并将其存储在第二个captruing组中
现在,您可以创建另一个正则表达式来应用于第二个命令:2\s+4\s+\d+\s+([^\s]+)
2 - match 2字面意思,这来自第一个正则表达式的第一个捕获组
\s+ -匹配一个或多个空格
4 - match 4字面意思,这来自第一个正则表达式的第二个捕获组
\s+ -匹配一个或多个空格
\d+ -匹配一个或多个数字
\s+ -匹配一个或多个空格
([^\s]+) -匹配一个或多个非空格字符并将其存储在捕获组中,这将捕获您的mac地址
https://stackoverflow.com/questions/55412129
复制相似问题