Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据
Posted
技术标签:
【中文标题】Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据【英文标题】:Ansible playbook - regexp | unable to change data in brackets and quotes 【发布时间】:2022-01-01 15:08:07 【问题描述】:我一直在尝试完成部署新服务器的剧本。我正在努力通过lineinfile
和正则表达式更改包含引号的括号内的数据:
- name: "Configuring: filebeat agent - configuring output to logstash"
lineinfile:
dest: "/etc/filebeat/filebeat.yml"
regexp: '#hosts: ["localhost:5044"]'
line: 'hosts: ["elk.home:5044"]'
tags: application
playbook 执行后,需要的行:
#hosts: ["localhost:5044"]
没有更新以反映:
hosts: ["elk.home:5044"]
我想要实现的是:
#hosts: ["localhost:5044"]
替换为hosts: ["elk.home:5044"]
没有产生错误。我试过改变"
和'
以及转义\
,但我无法正确表达。任何建议将不胜感激!
【问题讨论】:
我猜到(可能是错的)您正在使用lineinfile
模块?但答案不能基于猜测。您需要使用剧本的相关部分、正在发生的事情以及您的期望来更新问题。
filebeat.yml
配置文件可以在很多地方包含#hosts: ["localhost:5044"]
。您可以尝试使用不同的 regexp
和 insertbefore
或 insertafter
选项来定位确切的设置。你也可以考虑replace module。
另外,[
和 ]
在正则表达式中确实有意义,它们分隔了一个字符类,如果你想将它们匹配为文字,你需要转义这两个字符:@987654339 @
【参考方案1】:
感谢 seshadri_c 和 β.εηοιτ.βε!
我能够通过以下几行达成解决方案:
- name: "Configuring: filebeat agent - enabling logstash output hosts"
lineinfile:
dest: "/etc/filebeat/filebeat.yml"
regexp: '#hosts: \["localhost:5044"\]'
line: 'hosts: ["elk.home:5044"]'
tags:
- configuration
- application
- filebeat
完成剧本后,我遇到了空格问题。我添加了两个正确修改行的空格
- name: "Configuring: filebeat agent - enabling logstash output hosts"
lineinfile:
dest: "/etc/filebeat/filebeat.yml"
regexp: '#hosts: \["localhost:5044"\]'
line: ' hosts: ["elk.home:5044"]'
tags:
- configuration
- application
- filebeat
【讨论】:
以上是关于Ansible 剧本 - 正则表达式 |无法更改括号和引号中的数据的主要内容,如果未能解决你的问题,请参考以下文章