Как извлечь MAC-идентификатор? - PullRequest
1 голос
/ 29 марта 2019

Мне нужно извлечь MAC-идентификатор из набора связанных команд.

Из первой команды значение (2,4) в скобках eth-1(2-04) применяется во второй команде для извлечения идентификатора MAC из вывода второй команды.

Как мне извлечь MAC-идентификатор, который находится в той же строке, что и 2 4, в выводе второй команды?

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

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Я также новичок в 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)
0 голосов
/ 29 марта 2019

Для первой команды вы можете применить этот шаблон eth-1\((\d)-0(\d)

eth-1\( = совпадение eth-1( буквально

(\d) - сопоставить цифру и сохранить ее в первой группе захвата

-0 - соответствует -0 буквально,

(\d) - сопоставить цифру и сохранить ее во второй группе захвата

Демо

Теперь вы можете создать другое регулярное выражение для применения ко второй команде: 2\s+4\s+\d+\s+([^\s]+)

2 - буквально соответствует 2, это происходит от первой группы захвата из первого регулярного выражения

\s+ - соответствует одному или нескольким пробелам

4 - буквально соответствует 4, это происходит от второй группы захвата из первого регулярного выражения

\s+ - соответствует одному или нескольким пробелам

\d+ - соответствует одной или нескольким цифрам

\s+ - соответствует одному или нескольким пробелам

([^\s]+) - сопоставьте один или несколько символов, отличных от пробелов, и сохраните их в группе захвата, это захватит ваш MAC-адрес

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...