2017-04-19 12 views
0

나는 구문 분석 textfsm 파이썬 코드가 내가 "ifconfig를"출력파이썬 textfsm에서 2 개의 정규식을 결합하는 방법은 무엇입니까?

eth0  Link encap:Ethernet HWaddr 48:4d:7e:9e:ab:b8 
      inet addr:172.23.100.200 Bcast:172.23.106.255 Mask:255.255.255.0 
      inet6 addr: fe80::4a4d:7eaa:feaa:4eb8/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:1461589 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:1576996 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:1650010954 (1.6 GB) TX bytes:1856124201 (1.8 GB) 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:11047 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:11047 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:1567815 (1.5 MB) TX bytes:1567815 (1.5 MB) 

vboxnet0 Link encap:Ethernet HWaddr 0a:aa:27:00:00:00 
      inet addr:192.168.40.1 Bcast:192.168.33.255 Mask:255.255.255.0 
      inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:260 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B) TX bytes:51436 (51.4 KB) 

을 저장 한 그리고 나는 FSM 템플릿을 작성했습니다 fsmcli.txt에서

import textfsm 

f = open('/home/Projects/test_ra/fsm_cli.txt') 
inp = f.read() 
f.close() 

temp = open('/home/Projects/test_ra/fsm_cli.fsm') 
tab = textfsm.TextFSM(temp) 
res = tab.ParseText(inp) 
print tab.header 
for row in res: 
    print row 

리눅스 터미널에서 "ifconfig를"명령

01 :

Value Interface (\w+) 
Value MAC (\S+) 
Value Mask (\S+) 
Value MTU (\d+) 
Value IP (\S+) 

Start 
    ^${Interface}.*HWaddr\s+${MAC} 
    ^\s+inet addr:${IP}.*Mask:${Mask} 
    ^.*MTU:${MTU} -> Record 

아래 내가 파이썬 파일을 실행하면 같은 -fsm_cli.fsm 나는 아래의 출력을 얻을

['Interface', 'MAC', 'Mask', 'MTU', 'IP'] 
['eth0', '48:4d:7e:9e:4e:b8', '255.255.255.0', '1500', '172.23.106.239'] 
['', '', '255.0.0.0', '65536', '127.0.0.1'] 
['vboxnet0', '0a:00:27:00:00:00', '255.255.255.0', '1500', '192.168.33.1'] 

"lo"인터페이스를 구문 분석 할 수 없습니다 (출력의 세 번째 행에서 빈 문자열을 볼 수 있음). 나는 fsm 템플릿에서 "^ $ {Interface}. * HWaddr \ s + $ {MAC}"을 사용했기 때문에 그 이유를 알고 있습니다. "lo"에는 Hwaddr이 없으므로 인쇄하지 않습니다. 하지만 fsm 템플릿에 정규식을 작성하여 빈 HWaddr을 사용하여 인터페이스 "lo"를 얻을 수 있습니까?

+1

넣어. 이렇게하면 대체 일치하는 문자열이 만들어집니다. – Ajurna

답변

1

^$ {인터페이스} * (HWADDR \ S + $ {MAC} | 루프백).

내 추측 일 것이다. 이렇게하면 대체 일치하는 문자열이 만들어집니다. 넣어^0 {Interface}. * (HWaddr \ s + $ {MAC} | Loopback) 내 추측 될 것입니다. https://regex101.com/r/lqzfFP/1