Regex 多行sed替换

Regex 多行sed替换,regex,sed,Regex,Sed,我正在使用sed进行多行搜索/替换。该文件是默认的apache vhost: <VirtualHost *:80> ... <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ... </VirtualHos

我正在使用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的/(Directory\/var\/www\/>[^以下内容可能适合您:

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

这将仅在块
..

内执行替换
s\\(AllowOverride\)None\1 All

以下操作可能适用于您:

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

这将仅在块内执行替换
s| \(AllowOverride\)None\1 All
这也可以通过
awk

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

在集团内,
..
允许无覆盖
更改为
允许全部覆盖

这也可以通过
awk

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

在集团内,
..
允许无覆盖
更改为
允许全部覆盖

可能重复的
/g
/m
都不按您的想法做。后者在
sed
中根本不受支持。(也许您知道
/g
做什么,但无论如何都要使用它?它是无害的,但在这里毫无用处。)很抱歉重复。我不熟悉sed,我认为它可以处理常见的正则表达式标志。感谢您提供的信息!无论是
/g
还是
/m
都可能重复,请按您的想法执行。后者在
sed
中根本不受支持。(也许你知道
/g
做什么,但还是要使用它?它是无害的,但在这里没有用。)很抱歉重复。我不熟悉sed,我认为它可以处理常见的正则表达式标志。谢谢你的信息!