使用 `awk` 更改 Apache 配置文件中的项

使用 `awk` 更改 Apache 配置文件中的项

我不是awk工具方面的专家。我肯定忽略了一些显而易见的东西……

目前有效的方法:

[root@checkmk ~]# awk '/^[[:blank:]]*SSLCertificateFile/ {gsub(/\/etc\//, "/not_etc/")} 1' \
 /etc/httpd/conf.d/ssl.conf.tmp \
 | grep SSLCertificateFile
#   Point SSLCertificateFile at a PEM encoded certificate.  If
  SSLCertificateFile /not_etc/pki/tls/certs/localhost.crt
#   the referenced file can be the same as SSLCertificateFile

一切按预期进行。

但当我尝试:

[root@checkmk ~]# awk '/^[[:blank:]]*SSLCertificateFile/ {gsub(/.*\n/, "/etc/pki/public/viridian.city.pem")} 1' \
 /etc/httpd/conf.d/ssl.conf.tmp \
 | grep SSLCertificateFile
#   Point SSLCertificateFile at a PEM encoded certificate.  If
  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
#   the referenced file can be the same as SSLCertificateFile

它没有替换任何内容...我尝试了不同的表达方式,例如,,,/.*\n/等等......但没有成功。/.*\n$//.+\n/

如果我尝试以下操作,它会起作用,但如果有的话,我不会保留缩进。

awk '/^[[:blank:]]*SSLCertificateFile/ {gsub(/.*/, "SSLCertificateFile /etc/pki/public/viridian.city.pem")} 1' \
 /etc/httpd/conf.d/ssl.conf.tmp \
 | grep SSLCertificateFile

但我并没有/.*匹配整行,而是只匹配/etc/pki/tls/certs/localhost.crt。如何才能只替换值?

当然,我想用另一条路径替换整个路径(整行替代有效,但这不是最好的解决方案)。

这里是否sed有更直接的方法?

相关内容