Ansible剧本中的Python正则表达式问题

2024-06-16 09:51:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Zabbix代理配置中有一个字符串,如

HostMetadata=Linux

我想用变量“nginx”将其更改为:

HostMetadata=Linux nginx

这种变化必须是幂等的。但当我两次使用代码时,行变为

HostMetadata=Linux nginx nginx

我的代码:

      - name: regexp
        lineinfile:
          path: /etc/zabbix/zabbix_agentd.conf
          regexp: '^(HostMetadata=Linux.*)$'
          line:  '\1 nginx'
          backrefs: yes
        tags: regexp

我尝试了“^HostMetadata=((?!nginx)。)*$”,但它中断了下一步,结果将是“x nginx”

我想创建可重用代码并添加新参数。例如:

VAR=nginx
"HostMetadata=Linux" -> "HostMetadata=Linux nginx"

VAR=apache
"HostMetadata=Linux nginx" ->  "HostMetadata=Linux nginx apache"

VAR=nginx
"HostMetadata=Linux nginx apache" -> "HostMetadata=Linux nginx apache" (nothing changed)

Tags: path字符串代码name代理varlinuxapache
1条回答
网友
1楼 · 发布于 2024-06-16 09:51:37

您应该只捕获需要保留的部分,其余部分应该匹配

你可以用

regexp: '^(HostMetadata=Linux).*'

regex demo

详细信息

  • ^-字符串的开头
  • (HostMetadata=Linux)-捕获组#1(用替换字符串中的\1引用):文本字符串
  • .*-字符串的剩余部分,尽可能多的0个或更多字符(换行字符除外)

相关问题 更多 >