多线sed更换

时间:2013-10-01 16:30:03

标签: regex sed

我正在使用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。你知道我在这里做错了吗?

由于

2 个答案:

答案 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