2014-01-31 29 views
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,所以有沒有辦法讓它繼續搜索後,找到第一場比賽? 謝謝

+1

如果你使用'with',那麼我不認爲有明確關閉文件的理由。 –

+1

你並沒有在任何地方更新文件,你只需設置變量'line'。 – Barmar

+0

但我使用'replace()'? – user1653150

回答

1

從您的正則表達式中刪除連字符。 MAC地址組件通常用冒號分隔。

/([\dA-F]{2}:){5}([\dA-F]{2})/i 
相關問題