Поиск и замена значения файла конфигурации на sed - PullRequest
0 голосов
/ 05 мая 2018

Я работаю над автоматизацией обновления и установки сертификатов в моих веб-приложениях. Этот конкретный является qBittorrent. Он хранит сертификат SSL / закрытый ключ в файле конфигурации, например,

...
WebUI\AuthSubnetWhitelistEnabled=false
WebUI\HTTPS\Certificate=@ByteArray(-----BEGIN CERTIFICATE-----\n0GCSqGSIb3DQEBCwUA\nMEoxCzAQaih7W\n-----END CERTIFICATE-----)
WebUI\HTTPS\Enabled=true
WebUI\HTTPS\Key="@ByteArray(-----BEGIN PRIVATE KEY-----\nFAASdoONpV\nBvX+hUcjAne0PkZV9d7NG1QvipW+MPa4N12i+aRmwK\nhACATS21MMnBFTRGSfzwLy4=\n-----END PRIVATE KEY-----)"
WebUI\LocalHostAuth=true
...

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

sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1foo\2/g" /home/qbtuser/.config/qBittorrent/qBittorrent.conf

Это работает и заменяет строку сертификата на foo. Однако, когда я читаю фактический сертификат из файла и подставляю его, он завершается ошибкой:

cert=$(<$certPath)
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1${cert}\2/g" /home/qbtuser/.config/qBittorrent/qBittorrent.conf
sed: -e expression #1, char 78: unterminated `s' command

Видимо, ему не нравятся переводы строк в файле сертификата. Если я установлю cert в однострочное значение, например foo, это будет работать. Но многострочный не работает.

Как мне сделать эту работу?

1 Ответ

0 голосов
/ 21 июня 2018

Попробуйте это:

certificate=$(sed ':a;N;$!ba;s/\n//g' certificateFile);
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1$certificate\2/g" targetFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...