如何在配置文件中找到一个文本字符串,并用一个单行命令在下面添加两行新行



我正试图与Poodle SSL Bug作斗争,我必须更改许多配置文件。

我试着为自己节省一些工作,并通过单行命令来完成。因此,我需要修改(例如)/etc/lighttpd/lighttpd.conf.

我正在寻找ssl.engine="启用"

我想在找到字符串的下面添加两行:

ssl.use-sslv2          = "disable"
ssl.use-sslv3          = "disable"

最终结果应为:

$SERVER["socket"] == "0.0.0.0:80" {   
ssl.engine = "enable"   
ssl.use-sslv2          = "disable"         
ssl.use-sslv3          = "disable"   
ssl.pemfile = "/etc/ssl/cert.pem"   
ssl.ca-file = "/etc/ssl/cert.bundle"   
}  

我试过AWK,但由于空间和车厢返程的原因,我无法让它发挥作用。

很高兴看到一些俏皮话:)

以下是我尝试过的(这里肯定做错了什么):

awk '{a[NR]=$0}/ssl.engine/{a[NR+1]=a[NR+1]"ssl.use-sslv2 = "disable""}{a[NR+2]"ssl.use-sslv3 = "disable""}END{for(i=1;i<=NR;i++)print a[i]}' /etc/lighttpd/lighttpd.conf

只需打印每一行,如果一行包含regexp,则打印您想要的任何内容:

awk '{print} /ssl.engine = "enable"/{ print "ssl.use-sslv2 = "disable"nssl.use-sslv3 = "disable"" }' file

请注意"。"是RE元字符,因此需要在RE上下文中对其进行转义。

如果你想修改原始文件,那么用GNU awk:

awk -i inplace '...' file

以及任何awk或任何其他UNIX工具:

awk '...' file > tmp && mv tmp file

明确:

awk -i inplace '{print} /ssl.engine = "enable"/{ print "ssl.use-sslv2 = "disable"nssl.use-sslv3 = "disable"" }' file
awk '{print} /ssl.engine = "enable"/{ print "ssl.use-sslv2 = "disable"nssl.use-sslv3 = "disable"" }' file > tmp && mv tmp file

sed怎么样?

sed 's/ssl.engine = "enable"/ssl.engine = "enable"nssl.use-sslv2 = "disable"nssl.use-sslv3 = "disable"/' config

使用sed -i替换到位:

sed -i 's/ssl.engine = "enable"/ssl.engine = "enable"nssl.use-sslv2 = "disable"nssl.use-sslv3 = "disable"/' config

最新更新