2016-12-03 7 views
1

私は、TXT形式のファイアウォールのログファイルを持っている例えば:複数の正規表現から出力への参加

src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp 
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp 

私は私が必要とする情報(SRC、DST、サービスを抽出するために構築された正規表現を持っています)しかし、私は正規表現の出力に参加し、各サービス=オブジェクトの前に、それぞれと "TCP"の間のタブを使ってファイルに出力を書き込むことができる必要があります。新しいファイルには、次のようになります。

10.10.10.1 20.20.20.1 TCP 443 
30.30.30.1 40.40.40.1 TCP 8080 

はまた、私はbetweを区別できるようにする必要があります私は

src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp 

:入力ファイルの3行目の場合:どの出力ファイルに書き込むことは、例えば正確であるように、入力ファイルのサービス=の部分で「TCP」および「UDP」ENここにこだわって助けが必要です。次のようにzip()組み込み関数を使用することができます今すぐ

sources = [item.split('=')[1] for item in sources] 
dest = [item.split('=')[1] for item in dest] 

import re 
import sys 

with open("SFD-IPs.txt", "r") as file: 
    text = file.read() 

sources = re.findall(r'src=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text) 
dest = re.findall(r'dst=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text) 
service = re.findall(r'service=(\d+)', text) 


with open("output.txt", "w") as TufinReq: 
    TufinReq.write(sIP) 

f=open("output.txt", "r") 
del_list = ["src=", "dst=", "service="] 
list = [] 
for line in f: 
    for word in del_list: 
     if word in line: 
      line = line.replace(word, "") 
    list.append(line) 
f.close() 
f=open("output.txt", "w+") 
for line in list: 
    f.write(line) 
f.close() 

答えて

1

まず、あなたは以下のような所望のデータを取得するためにsourcesdestの各項目を分割する必要が

with open('output.txt', 'w') as f: 
    for item in zip(sources, dest, service): 
     f.write('{}\t{}\tTCP\t{}\n'.format(*item)) 

プロトコルも追加する場合は、次の操作を実行できます。

proto = re.findall(r'proto=(\w+)', text) 
proto = [item.upper() for item in proto] 

with open('output.txt', 'w') as f: 
    for item in zip(sources, dest, proto, service): 
     f.write('{}\t{}\t{}\t{}\n'.format(*item)) 

出力:

ためoutput.txtファイルの内容:

text = '''src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp 
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp 
src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp''' 

はこのようなものです:あなたは、単一の正規表現検索でこれを実現して置き換えることができます

10.10.10.1 20.20.20.1 TCP 443 
30.30.30.1 40.40.40.1 TCP 8080 
50.50.50.1 60.60.60.1 UDP 161 
+0

はそれを受け入れることを忘れないでください:) – ettanany

0

、はるかに単純なパターンで。

正規表現:

src=([\d\.]+).*dst=([\d\.]+).*service=(\d+).*proto=(.*) 

置換文字列:

$1 $2 $4 $3 

demo

+0

これは素晴らしい作品!私は本当にあなたの助けに感謝します – Clyde