Ansible:将文件中与正则表达式匹配的所有字符串转换为小写
Ansible: Convert all strings that match a regexp in a file to lowercase
如何使用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: '{{ | lower }}'
或其任何变体。
您可以做的是,将文件内容读入变量,将所有匹配正则表达式的字符串小写,然后然后使用替换模块。
例如:
- set_fact:
file_content: "{{ lookup('file', '/path/to/file') | regex_findall('.* =') }}"
这会将文件中与您的正则表达式匹配的所有字符串读取到列表中
然后就可以使用替换模块了:
- name: Convert all options to lowercase
replace:
regexp: "{{ item }}(.*)"
replace: '{{ item | lower }}'
with_items: "{{ file_content }}"
这将导致与您的正则表达式匹配的字符串被转换为小写,但该行的其余部分保持不变。
此解决方案假定所有字符串都采用相同的格式,并且字符串以您要转换为小写的部分开头。
如果字符串没有以您要转换为小写的部分开头,您只需更改替换模块中的正则表达式和替换参数即可匹配。
如何使用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: '{{ | lower }}'
或其任何变体。
您可以做的是,将文件内容读入变量,将所有匹配正则表达式的字符串小写,然后然后使用替换模块。
例如:
- set_fact:
file_content: "{{ lookup('file', '/path/to/file') | regex_findall('.* =') }}"
这会将文件中与您的正则表达式匹配的所有字符串读取到列表中
然后就可以使用替换模块了:
- name: Convert all options to lowercase
replace:
regexp: "{{ item }}(.*)"
replace: '{{ item | lower }}'
with_items: "{{ file_content }}"
这将导致与您的正则表达式匹配的字符串被转换为小写,但该行的其余部分保持不变。
此解决方案假定所有字符串都采用相同的格式,并且字符串以您要转换为小写的部分开头。
如果字符串没有以您要转换为小写的部分开头,您只需更改替换模块中的正则表达式和替换参数即可匹配。