用于在ssl.conf中更新SSL证书文件路径的Bash脚本(RegEx与#匹配)

时间:2017-01-25 20:53:50

标签: regex bash apache ssl sed

我正在创建一个可重用的脚本,用于在服务器设置上自动设置新的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%正确。

1 个答案:

答案 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