首页 > 解决方案 > Ansible:将文件中匹配正则表达式的所有字符串转换为小写

问题描述

如何使用 ansible 将文件中的所有字符串转换为小写?是整个字符串还是只是一部分?

如果我有一个 .ini 文件,其中选项是驼峰式,并且我想将它们切换为小写而不更改它们的值,我该如何在 ansible 中做到这一点?

标签: regexansiblelowercase

解决方案


假设您有一个结构如下的 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 }}"

这将导致与您的正则表达式匹配的字符串被转换为小写,但该行的其余部分保持不变。

此解决方案假定字符串都采用相同的格式,并且字符串以您要转换为小写的部分开头。

如果字符串不是以您要转换为小写的部分开头,您只需更改替换模块中的正则表达式和替换参数以匹配。


推荐阅读