1
ifconfig를 구문 분석하여 IP 주소가 할당 된 VLAN 만 남겨두고 싶습니다. 각 VLAN, 인터페이스 이름, IP 주소 및 MAC 주소 (변환 된 형식의 Mac)에서 다음 데이터를 원합니다. 이들은 목록의 목록에 저장되어야합니다. 각 VLAN에 대한 목록입니다.목록으로 ifconfig 구문 분석
지금까지 각 VLAN에 대해 IP 및 인터페이스 이름으로 하나의 목록을 만들었습니다. 그러나 나는 궤도에서 벗어나서 나쁜 생각으로 어떤 제안을하고 있다고 느낍니까?
원하는 출력 :
[['vlan1', '192.168.2.2', '0013.F200.0058'], ['vlan100', '192.168.110.2','0013.F200.0058'], ['vlan20', '192.168.30.2','0013.F200.0058']]
전류 출력 :
['vlan1', '0013.F200.0058', '192.168.2.2', 'vlan100', '0013.F200.0058', '192.168.110.2', 'vlan20', '0013.F200.0058', '192.168.30.2']
내가 쉽게 중첩 된 목록으로이 단순 목록을 설정할 수 있습니다 알고 있지만, 나는 그것이이 전 단계에서 수행해야합니다 생각합니다.
EG는하지만이 나쁜 생각 :
이i=0
new_list=[]
while i<len(data_list):
new_list.append(data_list[i:i+3])
i+=3
코드 :
이import re
a = """
vlan1 Link encap:Ethernet HWaddr 00:13:F2:00:00:58
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:2708 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2188 (2.1 KiB) TX bytes:383156 (374.1 KiB)
vlan100 Link encap:Ethernet HWaddr 00:13:F2:00:00:58
inet addr:192.168.110.2 Bcast:192.168.110.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2683 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:100 (100.0 B) TX bytes:375620 (366.8 KiB)
vlan2 Link encap:Ethernet HWaddr 00:13:F2:00:00:58
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vlan20 Link encap:Ethernet HWaddr 00:13:F2:00:00:58
inet addr:192.168.30.2 Bcast:192.168.30.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17274 errors:0 dropped:0 overruns:0 frame:0
TX packets:16376 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4389760 (4.1 MiB) TX bytes:3112376 (2.9 MiB)
"""
for paragraph in a.split('\n\n'):
#mac = re.search(r'HWaddr\s+(\S+)', paragraph)
#c.append(mac.group(1))
if "vlan" in paragraph and "inet addr:" in paragraph:
b= []
b.append(paragraph.split())
for i in b[0]:
if "addr:" in i:
ip = re.search(r'addr:(\S+)', i)
c.append(ip.group(1))
if "vlan" in i:
c.append(i)
if re.search(r'\d\d:\d\d:(\S+)', i):
it = iter(i.split(':'))
i = ".".join(x+y for x,y in zip(it,it))
c.append(i)
print c
왜 안'grep','regexp'? –
왜 목록 목록이 필요합니까? 목록을 작성하는 것이 더 낫지 않습니까? dict의 핵심은 vlan의 이름이고 모든 목록에는 mac 및 ip가 포함됩니다. – Wookie88
@ Wookie88 기본적으로 각 목록을 표 형식으로 인쇄하고 목록을 사용하는 데 익숙합니다. 길이와 데이터가 다양하기 때문에 색인을 참조하는 것이 쉽습니다. 오픈 아무것도 사용합니다. – Paul