繁体   English   中英

我想替换与特定模式/行相关的单词

[英]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 并且 rest 应该保持不变。 给我的数据只有 socket1 和 IP 需要更改。

我确实尝试过 lineinfile 并替换模块,但整个模式发生了变化。 请帮帮我。 它类似于 sed 命令,例如sed /socket1/<Ip_pattern>/<replacing_IP>所以这转到 socket1 行,只选择 ZA12A3079E14CED46E69BA52B8A90B。 我想要这样的东西。

这里是你需要的,

- 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

Output:

socket1:b:localhost:ws3,ws5,ws7
socket2:b:2.5.6.7:ws3,ws5,ws7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM