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

时间:2014-10-17 13:29:55

标签: linux string file awk config

我正在努力打击Poodle SSL Bug,并且我必须更改很多配置文件。

我试图通过单行命令来保存自己的一些工作。因此,我需要修改 - 例如 - /etc/lighttpd/lighttpd.conf。

我正在寻找ssl.engine =“enable”

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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