我想替换与特定 pattern/line 关联的单词
I want to replace a word which is associated with a particular pattern/line
假设一个文件 (socket.cfg) 具有以下内容
socket1:a:1.2.3.4:wso,ws1,ws2
socket2:b:2.5.6.7:ws3,ws5,ws7
现在我只想更改行中包含“socket1”的IP,其余部分保持不变。给我的数据只有socket1和要改的IP。
我确实尝试了 lineinfile 和替换模块,但整个模式都变了。请帮帮我。
它类似于这样的 sed 命令 sed /socket1/<Ip_pattern>/<replacing_IP>
所以这转到 socket1 行选择 IP 并仅替换它。我想要这样的东西。
这是你需要的,
- name: replace the ip address
lineinfile:
path: /path/to/socket.cfg
regexp: ^(socket1)(.*)(\d+.\d+.\d+.\d+)(.*)
line: \g<1>\g<2>{{ inventory_hostname }}\g<4>
backrefs: yes
注意:我在替换内容时使用了正则表达式组。
我已经用 inventory_hostname
替换了 IP,在我的例子中是本地主机,您可以将其更新为任何您想要的。
输入:
socket1:b:1.2.3.4:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7
输出:
socket1:b:localhost:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7
假设一个文件 (socket.cfg) 具有以下内容
socket1:a:1.2.3.4:wso,ws1,ws2
socket2:b:2.5.6.7:ws3,ws5,ws7
现在我只想更改行中包含“socket1”的IP,其余部分保持不变。给我的数据只有socket1和要改的IP。
我确实尝试了 lineinfile 和替换模块,但整个模式都变了。请帮帮我。
它类似于这样的 sed 命令 sed /socket1/<Ip_pattern>/<replacing_IP>
所以这转到 socket1 行选择 IP 并仅替换它。我想要这样的东西。
这是你需要的,
- name: replace the ip address
lineinfile:
path: /path/to/socket.cfg
regexp: ^(socket1)(.*)(\d+.\d+.\d+.\d+)(.*)
line: \g<1>\g<2>{{ inventory_hostname }}\g<4>
backrefs: yes
注意:我在替换内容时使用了正则表达式组。
我已经用 inventory_hostname
替换了 IP,在我的例子中是本地主机,您可以将其更新为任何您想要的。
输入:
socket1:b:1.2.3.4:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7
输出:
socket1:b:localhost:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7