我正在使用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。你知道我在这里做错了吗?
由于
答案 0 :(得分:4)
以下内容可能适合您:
sed '\#<Directory /var/www/>#,\#</Directory># s|\(AllowOverride\) None|\1 All|' inputfile
这只会在阻止s|\(AllowOverride\) None|\1 All|
... <Directory /var/www/>
中执行替换</Directory>
。
答案 1 :(得分:0)
这也可以使用awk
awk '/Directory \/var\/www\// , /\/Directory/ {sub(/AllowOverride None/,"AllowOverride All")} 1'
在bloc <Directory /var/www/> ... </Directory>
内将AllowOverride None
更改为AllowOverride All