我正在创建一个可重复使用的脚本,用于在服务器设置上自动设置新的 SSL。我有几个不同的行需要更新文件路径。
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"
我尝试从下面链接的公认解决方案开始,并在\b 之后添加 #。
Bash script to update path to ssl certificate file in ssl.conf
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
我感觉两者都不起作用,因为正则表达式不是 100% 正确。
最佳答案
您可以使用带有 ()
的组来匹配表达式组:
SSL_CONFIG_PATH=/etc/httpd/conf.d/ssl.conf
SSL_CA_CERT_PATH=/etc/pki/tls/certs/example-ca-bundle.crt
sed -ri "s|(.*#)(SSLCACertificateFile)\s+(.*)|\2 $SSL_CA_CERT_PATH|" $SSL_CONFIG_PATH
(.*#)
匹配评论(SSLCACertificateFile)
匹配字段名(.*)
匹配值
只有字段名称(第 2 组 \2
)需要跟在您的新路径之后
关于regex - 用于更新 ssl.conf 中 SSL 证书文件路径的 Bash 脚本(RegEx 单词与 # 匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41861469/