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

标签 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"

我尝试从下面链接的公认解决方案开始,并在\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/

相关文章:

apache - 向 Oozie 工作流通知添加授权

java - 这是 Apache Tomcat 的标准错误吗?

c - 带匹配括号的正则表达式

javascript - 简单电话 RegXP 返回 : Uncaught SyntaxError: Invalid or unexpected token

linux - 遍历 linux 中标题中不同数字的文件

linux - 如何在 Linux 中水平打印 awk 输出

git - 将 git 别名添加到 .bash_profile 不起作用

javascript - 替换输入中的坏词 单词多项选择

regex - 如何在 Eclipse 中替换/删除以特定单词开头的行?

java - Web 应用程序中的 CSRF 保护