我正在致力于在我的web应用程序中自动更新和安装证书。这个特别的是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显然,它不喜欢证书文件中的换行符。如果我像foo一样将cert设置为一行值,它就能正常工作。但是multiline不起作用。
我该怎么做呢?
发布于 2018-06-21 14:43:42
试试这个:
certificate=$(sed ':a;N;$!ba;s/\n//g' certificateFile);
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1$certificate\2/g" targetFilehttps://stackoverflow.com/questions/50183251
复制相似问题