我不是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
有更直接的方法?