1
我已經包含MAC和其他信息的文件,我試圖在每次找到MAC時替換MAC。 文件包含有類似查找和替換文件中的字符串(mac地址)不起作用
Dec 3 06:44:02 2013 192.168.5.21 [245]: <1234> <NOTI> |[email protected]|
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
,所以有沒有辦法讓它繼續搜索後,找到第一場比賽? 謝謝
如果你使用'with',那麼我不認爲有明確關閉文件的理由。 –
你並沒有在任何地方更新文件,你只需設置變量'line'。 – Barmar
但我使用'replace()'? – user1653150