Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于更新SSL.conf中SSL证书文件路径的Bash脚本(RegEx word match with)_Regex_Bash_Apache_Ssl_Sed - Fatal编程技术网

用于更新SSL.conf中SSL证书文件路径的Bash脚本(RegEx word match with)

用于更新SSL.conf中SSL证书文件路径的Bash脚本(RegEx word match with),regex,bash,apache,ssl,sed,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_ss

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

我尝试从下面链接的已接受解决方案开始,并在\b之后添加一个

我感觉这两种方法都不起作用,因为正则表达式不是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与字段名匹配 *匹配该值
新路径后面只需要字段名group 2\2

我还没有详细讨论过这一点,但我马上注意到一些事情。前面的.conf文件放在那里以注释掉该行。它就像C中的//一样。如果您实际使用该行,则不应包含它。另外,在我看来,设置路径的语句的末尾有一个文件名。路径不应该包括任何文件名,只包括它的路径。是的,我知道它只是注释掉了它,但我打算对整行进行正则表达式匹配,然后将整行替换为未注释的,并将实际使用的文件替换为默认文件。我认为这比找到正确的行,删除,然后更改文件名要简单得多。谢谢你,这是有效的,我猜-r标志适用于RegEx中的组?SSLCertificateFile发生了两次,所以我想得到一个从换行开始的标志。sed-ri s | ^SSLCertificateFile\s+.*\2$SSL|u CERT_PATH |$SSL_CONFIG_PATH我认为这是正确的,它工作了。-r是使用扩展正则表达式,感谢链接,我喜欢他的网站标题。
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
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