[英]Finding and replacing string (mac address) in a file is not working
我的文件除其他信息外還包含MAC,每次嘗試替換MAC時,我都試圖對其進行替換。 該文件包含類似
Dec 3 06:44:02 2013 192.168.5.21 [245]: <1234> <NOTI> |machine1@192.168.5.21|
request: 55:aa:cc:77:dd:bb: machine 192.168.5.21-00:11:ee:20:66:22-device-name-5
我已經寫了這段代碼,但是沒有用
import re
with open("/home/user/infile.txt", "r+") as fin:
for line in fin:
mac=re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})',line, re.I).group()
for col in mac:
mac_h = mac.replace(":",'')
mac_hex = "0x" + mac_h
mac_int= int(mac_hex, 16)
new_mac = mac_int+12345
new_mac= hex(new_mac)
line= line.replace(mac, new_mac)
fin.close()
所以我要搜索mac,這里有兩個問題,首先,它只找到該行中第一個出現的mac。 其次,當我僅在第二次出現時嘗試代碼時,它得到了21-00:11:ee:20:66:22
而不是00:11:ee:20:66:22
然后我在做一些算術(這部分工作),但是當我嘗試用新值替換舊值時。 它沒有用,我檢查了文件,沒有任何東西可以替換。 我不知道為什么,所以可以幫助我嗎?
更新
我更改了代碼,現在將更改寫入文件
import re
with open("/home/user/infile.txt", "r+") as fin:
with open("/home/user/infile.txt", "w+") as f_out:
for line in fin:
mac=re.search(r'([0-9A-F]{2}[:]){5}([0-9A-F]{2})',line, re.I).group()
for col in mac:
mac_h = mac.replace(":",'')
mac_hex = "0x" + mac_h
mac_int= int(mac_hex, 16)
new_mac = mac_int+12345
new_mac= hex(new_mac)
line= line.replace(mac, new_mac)
f_out.write(line)
現在剩下的問題是它只找到第一個mac出現55:aa:cc:77:dd:bb:
並移動到下一行而不匹配第二個00:11:ee:20:66:22
,所以有沒有辦法讓它找到第一個比賽后繼續搜索? 謝謝
從您的正則表達式中刪除連字符。 MAC地址組件通常用冒號分隔。
/([\dA-F]{2}:){5}([\dA-F]{2})/i
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.