gpt4 book ai didi

linux - 使用 sed 搜索并替换配置文件值

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:20 26 4
gpt4 key购买 nike

我正在努力在我的网络应用程序中自动更新和安装证书。这个特别的是 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 这样的单行值,它就可以工作。但是多行不起作用。

我如何使它工作?

最佳答案

试试这个:

certificate=$(sed ':a;N;$!ba;s/\n//g' certificateFile);
sed -i -E "s/(WebUI\\\\HTTPS\\\\Certificate=@ByteArray\().+(\))/\1$certificate\2/g" targetFile

关于linux - 使用 sed 搜索并替换配置文件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com