Ansible正则表达式删除指定内容及清理YAML空行问题
解决Ansible中replace和lineinfile模块的配置问题
一、删除control_center_basic_users:至文件末尾的内容
你之前正则匹配失败,核心原因是没开启多行匹配模式——Ansible的replace模块默认是单行匹配,.不会匹配换行符。试试这个配置:
- name: Remove control_center_basic_users section to end of file ansible.builtin.replace: path: /path/to/your/target.yaml regexp: 'control_center_basic_users:.*' replace: '' flags: 's'
flags: 's':开启单行模式,让.匹配包括换行在内的所有字符,从而覆盖从目标行到文件末尾的全部内容。- 如果目标行带缩进(比如
control_center_basic_users:),把正则调整为'^\s*control_center_basic_users:.*'即可匹配缩进。
二、清理sasl_plain_users:后的空行
分两种场景处理:
场景1:sasl_plain_users:所在行末尾只有空白字符
用lineinfile配合反向引用保留关键字,去掉多余空白:
- name: Trim empty content on sasl_plain_users line ansible.builtin.lineinfile: path: /path/to/your/target.yaml regexp: '^(sasl_plain_users:)\s*$' line: '\1' backrefs: yes
regexp: '^(sasl_plain_users:)\s*$':匹配以sasl_plain_users:开头、后续全为空白字符的行。backrefs: yes:启用反向引用,\1会保留正则捕获的sasl_plain_users:,替换后仅保留关键字本身。- 带缩进的话,把正则改成
'^(\s*sasl_plain_users:)\s*$',line: '\1'即可保留原缩进。
场景2:sasl_plain_users:后面跟着独立空行
用replace模块匹配并移除后续空行:
- name: Remove blank lines after sasl_plain_users: ansible.builtin.replace: path: /path/to/your/target.yaml regexp: '(sasl_plain_users:)\n\s*\n' replace: '\1\n'
这个正则会匹配sasl_plain_users:后的空行(含缩进空白),替换后仅保留关键字和一个换行,去掉多余空行。
内容的提问来源于stack exchange,提问作者adbdkb
相关产品推荐
相关产品推荐

