2

我正在努力使用 sed 进行多行搜索/替换。该文件是默认的 apache vhost:

<VirtualHost *:80>
 ...
 <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
 </Directory>
    ...
</VirtualHost>

我想要的是将 AllowOverride None 替换为 AllowOverride All。我想出的 sed 命令是:

sed -r -i 's/(Directory \/var\/www\/>[^<]*AllowOverride) All/$1 None/gm' /etc/apache2/sites-available/default

正则表达式根据我的测试工作正常,但不适用于 sed。你知道我在这里做错了什么吗?

谢谢

4

2 回答 2

4

以下可能对您有用:

sed '\#<Directory /var/www/>#,\#</Directory># s|\(AllowOverride\) None|\1 All|' inputfile

这将s|\(AllowOverride\) None|\1 All|仅在块内执行替换<Directory /var/www/>... </Directory>

于 2013-10-01T16:35:54.167 回答
0

这也可以用awk

awk '/Directory \/var\/www\// , /\/Directory/ {sub(/AllowOverride None/,"AllowOverride All")} 1'

集团内<Directory /var/www/> ... </Directory>变更AllowOverride NoneAllowOverride All

于 2013-10-01T17:48:52.047 回答