0

假设一个文件(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 并仅替换它。我想要这样的东西。

4

1 回答 1

1

这里是你需要的,

- 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

注意:我在替换内容时使用了正则表达式组。

在我的情况下,我已将 IP 替换inventory_hostname为 localhost,您可以将其更新为您想要的任何内容。

输入:

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
于 2021-01-20T11:29:26.353 回答