[英]Sed replace after specific pattern
給定這種模式:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None //change this one
Require all granted
</Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
運行$ sed -e 's/AllowOverride None/AllowOverride All/i' file
將更改AllowOverride
所有實例
如何將<Directory /var/www/>
的AllowOverride None
更改為AllowOverride All
通過sed
$ sed '/<Directory \/var\/www\/>/,/<\/Directory>/{s~AllowOverride None~AllowOverride All~i}' file
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All //change this one
Require all granted
</Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
/<Directory \\/var\\/www\\/>/,/<\\/Directory>/
用於選擇那些在范圍內的行。 {s~AllowOverride None~AllowOverride All~i}
僅在那些匹配的行上進行替換。
您可以將sed
的地址范圍指定為
$ $ sed -e '\#<Directory /var/www/>#, \#</Directory># s/AllowOverride None/AllowOverride All/i' input
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All //change this one
Require all granted
</Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#<Directory /var/www/>#, \\#</Directory>#
確保僅對開始模式Directory /var/www/>
和結束模式</Directory>
您可以將awk
與RS=
一起使用:
awk -v RS= -v ORS='\n\n' '/<Directory \/var\/www\/>/ {
sub(/AllowOverride None/, "AllowOverride All")} 1' file
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All //change this one
Require all granted
</Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
使用RS=
會將記錄分隔符設置為空字符串,從而為我們提供每個記錄中的每個<Directory>...</Directory>
塊。 然后只需將記錄與<Directory /var/www/>
匹配,並使用sub
輕松替換即可。
sed '/<Directory \/var\/www\/>/,/^<\Directory>.$/s/AllowOverride None/AllowOverride All/g'
跨多行查找模式
<Directory \/var\/www\/>/,/^<\Directory>.$
查找以<Directory /var/www/>
並以僅</Directory>
結尾的每一行
之后,將每個模式組中的AllowOverride All
替換為AllowOverride None
。
產量
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All //change this one
Require all granted
</Directory>
<Directory /srv/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.