我想浏览一个文件(在本例中为apache2.conf),搜索标记部分开头的行(),然后在该部分中更改另一行(AllowOverride None到AllowOverride All)。 / p>
我想更改的行可能不是本节开头的行,但我只想更改它的第一次出现。
以下是apache2.conf中的一个示例:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/> <= this is the begining of the section
Options Indexes FollowSymLinks
AllowOverride None <= this is the line I want to change
Require all granted
</Directory>
#<Directory /srv/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
在朋友的帮助下,我来到了这里
sed '/"<Directory \/var\/www\/>"/,$ {s/"AllowOverride None"/"AllowOverride All"/ }' apache2.conf
,但事实是它不起作用。
我期望AllowOverride None
在经过sed后会变成AllowOverride All
。
有什么解决办法吗?我做错了什么?
答案 0 :(得分:0)
您的sed
命令非常接近。首先,您不应在其中添加双引号:
sed '/<Directory \/var\/www\/>/,$ {
s/AllowOverride None/AllowOverride All/
}' apache2.conf
现在的问题是,它还会更改被注释掉的最后一节中的AllowOverride None
,并且您“只想更改它的首次出现”。
只需在第一次出现“ AllowOverride None”时结束您的代码块即可:
sed '/<Directory \/var\/www\/>/,/AllowOverride None/ {
s/AllowOverride None/AllowOverride All/
}' apache2.conf