Ansible: Преобразуйте все строки, соответствующие регулярному выражению в файле, в нижний регистр

#regex #ansible #lowercase

Вопрос:

Как преобразовать все строки в файле в нижний регистр с помощью ansible? Либо вся строка целиком, либо только часть?

Если у меня есть файл .ini, в котором указаны параметры camelcase, и я хочу переключить их в нижний регистр без изменения их значений, как я могу это сделать в ansible?

Ответ №1:

Допустим, у вас есть 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 }}"

 

И это приведет к тому, что строки, соответствующие вашему регулярному выражению, будут преобразованы в нижний регистр, но остальная часть строки останется прежней.

Это решение предполагает, что все строки имеют один и тот же формат и что строка начинается с части, которую вы хотите преобразовать в нижний регистр.

Если строка не начинается с части, которую вы хотите преобразовать в нижний регистр, вы можете просто изменить параметры регулярного выражения и замены в модуле замены, чтобы они соответствовали.