簡體   English   中英

Python腳本中的IPv4地址替換

[英]IPv4 address substitution in Python script

我在使它起作用時遇到了麻煩,我希望有任何想法:

我的目標是:獲取一個文件,一行一行地讀取它,用任何IP地址替換特定的替換項,然后將更改寫入同一文件。

我知道這不是正確的語法

偽實例:

$ cat foo
10.153.193.0/24 via 10.153.213.1

def swap_ip_inline(line):
  m = re.search('some-regex', line)
  if m:
    for each_ip_it_matched:
      ip2db(original_ip)
    new_line = reconstruct_line_with_new_ip()

    line = new_line

  return line

for l in foo.readlines():
  swap_ip_inline(l)

do some foo to rebuild the file.

我想獲取文件'foo',在給定行中找到每個IP,使用ip2db函數替換ip,然后輸出更改后的行。

工作流程:1.打開文件2.讀取行3.交換IP 4.將行(更改/未更改)保存到tmp文件中5.用tmp文件覆蓋原始文件

*編輯后添加了偽代碼示例

干得好:

>>> import re
>>> ip_addr_regex = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')
>>> f = open('foo')
>>> for line in f:
...     print(line)
...
10.153.193.0/24 via 10.153.213.1

>>> f.seek(0)
>>>

specific_substitute = 'foo'

>>> for line in f:
...     re.sub(ip_addr_regex, specific_substitute, line)
...
'foo/24 via foo\n'

這個鏈接給了我我一直在尋找的突破:

Python-從字符串解析IPv4地址(即使經過審查)

一個簡單的修改通過了最初的煙霧測試:

def _sub_ip(self, line):
    pattern = r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)([ (\[]?(\.|dot)[ )\]]?(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3})"
    ips = [each[0] for each in re.findall(pattern, line)]
    for item in ips:
        location = ips.index(item)
        ip = re.sub("[ ()\[\]]", "", item)
        ip = re.sub("dot", ".", ip)
        ips.remove(item)
        ips.insert(location, ip)

    for ip in ips:
        line = line.replace(ip, self._ip2db(ip))

    return line

我敢肯定,我會把它清理干凈,但這是一個很好的開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM