簡體   English   中英

使用正則表達式通過逐行循環文件來替換IP地址

[英]Ansible replace ip address using regex by looping through a file line by line

我是新來的。

我有一個包含多行的文件,其中某些行引用了ipv4地址。 我的用例是用相同ip的增量版本替換每行中的ipaddress。

因此,例如,如果我的文件包含以下行:

該行的IP地址是10.1.1.1,用戶名test1

該行的IP地址為20.2.2.2,用戶名為test2

我想將其替換為:

該行的IP地址是10.1.1.2,用戶名test1

該行的IP地址為20.2.2.3,用戶名為test2

我正在使用Ansible replace模塊使用正則表達式和替換在行中找到ipv4地址。

- name: Increment and Replace Ip address and
      replace:
        path: "config/changed-ip.txt"
        regexp: "{{ '([0-9]{1,3}[\\.]){3}[0-9]{1,3}' }}"
        replace: "{{ 'x.x.x.x' }}"

上面的代碼用替換中指定的IP地址替換了所有ip地址。

有沒有一種方法可以從每行提取IP地址並增加它,並使用lineinfile或replace這樣的模塊來替換ipaddr代替舊的ip?

我正在運行ansible 2.6

嘗試使用此正則表達式:

^(\d{1,3}\.){3}\d{1,3}

^表示字符串的開頭。

您可以從ansible劇本中調用python腳本來執行您感興趣的任務。如果要執行ip地址算術,則ipaddress模塊很有用。

例如:

---
  - hosts: all
    tasks:
    - command: "python3 process_ip_addresses.py text"

隨附的python是:

from ipaddress import IPv4Address
import re
import sys

file_path = sys.argv[1]
with open(file_path) as f:
    text = f.read()

ip_addresses = re.findall( r'[0-9]+(?:\.[0-9]+){3}', text )
replacement_ip_addresses = [str(IPv4Address(address) + 1) for address in ip_addresses]
for old_address, new_addresss in zip(ip_addresses, replacement_ip_addresses):
    text = text.replace(old_address, new_addresss)

with open(file_path, "w") as f:
    f.write(text)

暫無
暫無

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

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