regex - Ansible:将文件中匹配正则表达式的所有字符串转换为小写
问题描述
如何使用 ansible 将文件中的所有字符串转换为小写?是整个字符串还是只是一部分?
如果我有一个 .ini 文件,其中选项是驼峰式,并且我想将它们切换为小写而不更改它们的值,我该如何在 ansible 中做到这一点?
解决方案
假设您有一个结构如下的 INI 文件:
[Customers]
customerName = James Robinson
customerAge = 17
customerID = 1234
IsAdmin = True
并且您想将文件转换为以下内容:
[Customers]
customername = James Robinson
customerage = 17
customerid = 1234
isadmin = True
替换模块本身不会让你这样做。例如,您不能执行以下任务:
- name: Convert all options to lowercase
replace:
regexp: "(.* =)(.*)"
replace: '{{ \1 | lower }}\2'
或其任何变体。
您可以做的是将文件的内容读入一个变量,将匹配正则表达式的所有字符串小写,然后使用替换模块。
例如:
- set_fact:
file_content: "{{ lookup('file', '/path/to/file') | regex_findall('.* =') }}"
这会将文件中与您的正则表达式匹配的所有字符串读入列表
然后你可以使用替换模块:
- name: Convert all options to lowercase
replace:
regexp: "{{ item }}(.*)"
replace: '{{ item | lower }}\1'
with_items: "{{ file_content }}"
这将导致与您的正则表达式匹配的字符串被转换为小写,但该行的其余部分保持不变。
此解决方案假定字符串都采用相同的格式,并且字符串以您要转换为小写的部分开头。
如果字符串不是以您要转换为小写的部分开头,您只需更改替换模块中的正则表达式和替换参数以匹配。
推荐阅读
- javascript - 为什么当我点击页面时 setTimeout/setInterval 变慢?
- c# - 为什么 Visual Studio 会添加不同版本的引用?
- python - 实施对话时间测量 App Slack
- c# - 登录到网站重定向到 url 并获取新页面的 htmlsource?
- docker - 轻松访问 Windows Docker 容器上的文件
- php - 如何过滤表格,然后将输出打印为 pdf
- spring-webflux - 如何在反应性弹簧数据cassandra中使多个保存调用原子化?
- python - Python 未读取的自定义模块,生成 ImportError
- database - 如何使用 ElasticSearch 作为微服务环境中关系结构的搜索引擎
- scripting - Illustrator 批量 EPS 到 JPEG 转换