Я придумал лучший способ достижения цели.
цель :разрешить пользователям создавать var-файлы с информацией о репозитории. несколько репозиториев в одном файле и один в один. (ex :CentOS -Базовый файл репо содержит множество различных элементов, но elasticsearch, epel и т. д. должны находиться в отдельных файлах)
**необходимо учитывать, что репозитории apt по умолчанию размещаются в sources.list, а другие — в /etc/apt/sources.list.d/
Это протестировано и работает для дистрибутивов на основе yum, в настоящее время работает над APT.
Нет необходимости экранировать пробелы и одинарные -кавычки, если скрипт правильно заключен в двойные -кавычки:
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'