[英]Bash script to update path to SSL certificate file in ssl.conf (RegEx word match with #)
[英]Bash script to update path to ssl certificate file in ssl.conf
我正在创建一个可重用的脚本,用于在服务器设置上自动设置新的 SSL。 我有几行需要更新文件路径。
ssl.conf 文件中的默认值如下所示(一个带有前导 # 标签):
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
我需要在 bash 脚本中动态设置它,以这样结束:
SSLCertificateFile /etc/pki/tls/certs/example.crt
到目前为止,我是从这个开始的,但我不确定我在做什么。
~/update_ssl_conf.sh
代码:
#!/bin/bash
SSL_CONFIG_PATH="/etc/httpd/conf.d/ssl.conf"
SSL_DEFAULT_CERT_PATH="SSLCertificateFile /etc/pki/tls/certs/localhost.crt"
SSL_CERT_PATH="SSLCertificateFile /etc/pki/tls/certs/example.crt"
sed "s/.*\b$SSL_DEFAULT_CERT_PATH\b.*/$SSL_CERT_PATH/" $SSL_CONFIG_PATH
***更新区域,还需要 sed 命令来更新以 # 开头的行。
ssl.conf 文件中的默认值如下所示(具有前导 # 标记):
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
我需要在 bash 脚本中动态设置它,以这样结束:
SSLCACertificateFile /etc/pki/tls/certs/example-ca-bundle.crt
到目前为止,我是从这个开始的,但我不确定我在做什么。
~/update_ssl_conf.sh
代码:
#!/bin/bash
SSL_CONFIG_PATH="/etc/httpd/conf.d/ssl.conf"
SSL_DEFAULT_CA_CERT_PATH="#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt"
SSL_CA_CERT_PATH="SSLCACertificateFile /etc/pki/tls/certs/example-ca-bundle.crt"
我从公认的解决方案中尝试过
sed -i "s|.*\b#$SSL_DEFAULT_CA_CERT_PATH\b.*|$SSL_CA_CERT_PATH|" SSL_CONFIG_PATH
和
sed -i "s|(?s).*(?<!\\w)$SSL_DEFAULT_CA_CERT_PATH(?!\\w).*|$SSL_CA_CERT_PATH|" $SSL_CONFIG_PATH
两者都不起作用,因为正则表达式不正确。
问题在于斜线。 您的变量包含它们,最终命令将有多个正斜杠,这会影响您的原始sed
语法 s/
<search>/<replace/
语法。 只需将您的sed
单词分隔符从/
更改为|
(或任何其他字符,例如说@
或~
)来修复它。
sed -i "s|.*\b$SSL_DEFAULT_CERT_PATH\b.*|$SSL_CERT_PATH|" file
应该可以解决您的问题并使用-i
标志进行就地替换并使用-i.bak
以<filename>.bak
格式保存文件的备份
GNU sed
, man
页说
/ 字符可以统一替换为任何给定 s 命令中的任何其他单个字符。 / 字符(或任何其他代替它的字符)只能出现在正则表达式或替换中,前提是它前面有一个 \\ 字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.