You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible正则表达式匹配Netplan配置DNS地址失败求助

解决Ansible lineinfile匹配DNS配置行的问题

你的正则匹配失败主要踩了这几个坑:

  • 正则里的[是特殊元字符,用来定义字符组,直接写会失效,必须转义成\[,结尾的]同理也要转义成\]
  • 原正则只匹配了单数字段的IP(比如8.8.8.8),完全没考虑一行里有多个IP的情况
  • 硬写固定空格数不够灵活,yaml缩进稍有变化就会匹配失败

给你两个可行的解决办法:

方案1:灵活适配当前格式

用转义后的方括号,同时支持匹配多个IP,还能兼容任意缩进:

- name: 更新DNS服务器地址
  lineinfile:
    path: /etc/netplan/netcfg.yaml
    regexp: '^\s+addresses: \[[0-9.]+(,[0-9.]+)*\]$'
    line: '       addresses: [1.1.1.1,1.0.0.1]'
    backrefs: yes

解释:

  • ^\s+:匹配行首任意数量的空格,不用硬写固定个数
  • \[[0-9.]+(,[0-9.]+)*\]:匹配[IP,IP...]的格式,覆盖单个或多个IP的场景

方案2:严格匹配合法IP格式

如果需要精准校验IP合法性,可以用更严谨的正则(日常场景方案1足够):

- name: 更新DNS服务器地址
  lineinfile:
    path: /etc/netplan/netcfg.yaml
    regexp: '^\s+addresses: \[((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(,((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*\]$'
    line: '       addresses: [1.1.1.1,1.0.0.1]'
    backrefs: yes

注意:要把path改成你实际的文件路径,line里的缩进必须和原文件保持一致,否则会破坏yaml的格式有效性。

内容的提问来源于stack exchange,提问作者Krish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:55:08