題目:我有一個日誌檔案如圖所示,我要取出檔案中所有的IP地址,以方便我將其加入到防火牆的黑名單中
程式碼中所用到的正規表示式介紹:
python使用的正規表示式是:
對該正規表示式的解釋:
\b(?:\d{1,3}\.){3}\d{1,3}\b
\b
:單詞邊界。確保IP地址前後不與其他字元連線。(?:\d{1,3}\.)
:非捕獲型分組。匹配1到3個數字,後跟一個點號。{3}
:前面的非捕獲型分組重複3次,即匹配3個數字和3個點號。\d{1,3}
:匹配1到3個數字。\b
:單詞邊界。確保IP地址前後不與其他字元連線。
shell命令列的awk命令使用的正規表示式是:
對該正規表示式的解釋:
[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+
[0-9]
:表示匹配數字0到9之間的任意一個字元。{1,3}
:表示前面的字元可以重複出現1到3次。這裡用於匹配每個數字段(每個IP地址由四個數字段組成)。\.
:表示匹配點號字元".",需要使用轉義符"\"。+
:表示前面的字元可以重複出現1次或更多次。
python程式碼(其中涉及三種檔案輸入方式)
1 #處理檔案並提取其中的IP地址,將結果輸入到test1.txt檔案中 2 import re 3 import sys 4 file_name = sys.argv[1] 5 f = open (file_name,"r",encoding='utf-8') 6 #使用方法:在命令列中使用python 1.py test.txt 7 #test.txt是需要處理的檔案;1.py為我要操作的檔案
8 9 #2、獲取需要輸入的檔名,並對輸入的檔名進行處理。 10 #file_name = input("請輸入需要處理的檔名:") 11 #f = open (file_name,"r",encoding='utf-8') 12 13 #3、直接在程式碼中輸入檔名。 14 #f = open("test.txt", "r", encoding='utf-8') 15 16 data = f.readlines() 17 f.close() 18 f1 = open("test1.txt", "w", encoding='utf-8') 19 20 21 for line in data: 22 results = re.findall(r"\b(?:\d{1,3}\.){3}\d{1,3}\b", line) 23 for t in results: 24 25 26 27 #將結果寫入到f1的檔案中 28 f1.write(t + '\n') 29 f1.close()
處理結果,如圖所示:
Linux 終端中使用 awk命令:
awk "{ match(\$0, /[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+/, ip); if(ip[0] != \"\") print ip[0] }" test.txt
處理結果,如圖所示: