Проблема экранирования sed sh

Я придумал лучший способ достижения цели.

цель :разрешить пользователям создавать var-файлы с информацией о репозитории. несколько репозиториев в одном файле и один в один. (ex :CentOS -Базовый файл репо содержит множество различных элементов, но elasticsearch, epel и т. д. должны находиться в отдельных файлах)

  1. создать файлы var с именами {repo} _{pkg _mgr} _repo.yml
  2. в файле main.yml роли найдите все файлы с {repo} _{pkg _mgr} repo.yml files ИЛИ*{pkg _mgr}.yml файлы, основанные на переменной, переданной из Tower/AWX, и зарегистрируйтесь в переменной. сделайте это как для yum, так и для apt, как перешло от AWX/Tower
  3. передать {variable}.files задаче, которая создает конфигурации репозитория yum или apt.
  4. Используйте модуль шаблона и файл шаблона jinja2, чтобы создать файл репо и поместить его на удаленный сервер.
  5. запустить задачу, чтобы убедиться, что все ключи gpg импортированы для текущих репозиториев

**необходимо учитывать, что репозитории apt по умолчанию размещаются в sources.list, а другие — в /etc/apt/sources.list.d/

Это протестировано и работает для дистрибутивов на основе yum, в настоящее время работает над APT.

0
02.07.2020, 19:40
1 ответ

Нет необходимости экранировать пробелы и одинарные -кавычки, если скрипт правильно заключен в двойные -кавычки:

sed "s^// \$cfg\['Servers'^\$cfg['Servers'^" file

Кроме того, скобку при замене экранировать не нужно. Скобка в регулярном выражении должна быть экранирована, потому что в противном случае она понимается как специальный символ регулярного выражения.

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

servers.sed:

s^// \$cfg\['Servers'^$cfg['Servers'^

Тогда запустите его таким образом:

sed -f servers.sed file

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

sudo sh -c 'sed -f servers.sed file > newfile'
2
18.03.2021, 23:22

Теги

Похожие вопросы