我正在创建一个可重用的脚本,用于在服务器设置上自动设置新的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"
我尝试从下面链接的已接受解决方案开始,然后添加一个#after \ 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%正确。
答案 0 :(得分:1)
您可以使用()
的群组来匹配表达式组:
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
)