2016-07-29 60 views
0

我從Cisco ASA以下配置:Python的正則表達式 - 思科ASA的配置相匹配的正則表達式

access-list OUTSIDE extended permit tcp any object O-10.1.2.230 eq 9091 
access-list OUTSIDE extended permit tcp any object O-10.1.2.241 eq pptp 

我想要的結果看起來像這樣在列表或CSV格式:

rule number, permit/deny, protocol, source IP, source port, des ip, des port. 

1, permit, tcp, any, any, 10.1.2.230, 9091 
2, permit, tcp, any, any, 10.1.2.241, pptp 

在開線( 「file.txt的」):)
打印line.split(

打印類型:
如果 「訪問列表」 中的行(line)

謝謝!

+0

格式總是這樣嗎?我的意思是總有空格分隔每個領域? – bernie

+0

如果格式總是相同的,那麼你不需要正則表達式。只是在空間的基礎上拆分並在指數基礎上閱讀。 –

+0

所以我打開一個完整的防火牆配置文件。然後,我需要搜索以「訪問列表」開頭的所有行。然後我只需要將這個值作爲列表返回,我可以像你說的那樣在索引上顯示。我認爲我仍然需要正則表達式來進行搜索? –

回答

0

請檢查這是否有用。

import csv 
import sys 
#Open both files and get handles. 
config_file = open("out.txt" ,'r') 
csv_file = open("result.csv",'w') 
# 
try: 
    writer = csv.writer(csv_file) 
    #Write titles in csv file 
    csv_head_list = ['rule number', 'permit/deny', 'protocol', 'source IP', 'source port', 'des ip', 'des port'] 
    writer.writerow(csv_head_list) 
    rule_num = 0 
    #Read file line by line 
    for line in config_file.readlines(): 
     line=line.strip() 
     #Check "access-list" in line 
     if "access-list" in line: 
      tmp_list = line.split() 
      rule_num = rule_num + 1 
      permit_deny = str(tmp_list[3]) 
      protocol = str(tmp_list[4]) 
      src_ip = src_port = str(tmp_list[5]) 
      des_ip = str(tmp_list[7]).replace("O-",'') 
      des_port = str(tmp_list[9]) 
      #Write data in csv file 
      csv_data_list =[rule_num, permit_deny, protocol, src_ip, src_port, des_ip, des_port] 

      writer.writerow(csv_data_list) 
      csv_data_list = [] 
except Exception, e: 
    print str(e) 
finally: 
    config_file.close() 
    csv_file.close()