Ansible如何将文件中匹配正则的字符串转换为小写
Ansible 字符串转小写及INI配置项转换实现方案
一、文件内字符串转小写(支持全量/指定正则匹配部分)
1. 全量转换文件所有内容
直接通过replace模块匹配全文,调用jinja2的lower过滤器转换即可,playbook示例:
--- - name: 全量转换文件内容为小写 hosts: your_host tasks: - name: 转换指定文件全量内容为小写 ansible.builtin.replace: path: /path/to/your/file regexp: '^(.*)$' replace: '{{ "\g<1>" | lower }}'
2. 仅转换正则匹配的部分内容
修改regexp参数匹配你需要转换的内容片段,用分组捕获要转小写的部分即可,比如仅转换所有以大写字母开头的单词为小写,示例:
--- - name: 仅转换正则匹配部分为小写 hosts: your_host tasks: - name: 转换所有匹配大写开头单词的内容为小写 ansible.builtin.replace: path: /path/to/your/file regexp: '(\b[A-Z][A-Za-z0-9_]*\b)' replace: '{{ "\g<1>" | lower }}'
你可以自行修改regexp参数的正则规则,匹配你需要转换的特定内容。
二、INI配置文件驼峰配置项转小写(保留配置值不变)
核心逻辑是通过正则精准匹配INI配置的键(排除注释行、section行),仅对键的部分做小写转换,配置值完全保留,playbook示例:
--- - name: INI配置项驼峰转小写 hosts: your_host tasks: - name: 转换INI配置的驼峰键为小写,保留值不变 ansible.builtin.replace: path: /path/to/your/config.ini # 正则说明:排除以#/;开头的注释行、[]包裹的section行,捕获缩进、配置键、键值对后半部分三个分组 regexp: '^(\s*)(?!#|;|\[)([a-zA-Z0-9_]+)(\s*=.*)$' replace: '\1{{ "\g<2>" | lower }}\3'
- 正则匹配说明:负向先行断言
(?!#|;|\[)确保不会修改注释、section内容,第二个分组捕获的是驼峰格式的配置键,仅对该部分执行小写转换,第三个分组的等于号和配置值完全保留不修改。
内容的提问来源于stack exchange,提问作者Leshawn Rice
相关产品推荐
相关产品推荐

