[英]How do I replace the second occurrence of string 'AllowOverride None' with 'AllowOverride All' using sed
我想用sed替換文件/etc/apache2/sites-available/default
中的AllowOverride All
字符串第二次出現的AllowOverride None
字符串。
這是以前的樣子:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
...
這就是我想要的樣子:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
...
我試過了:
sed -i 's/AllowOverride None/AllowOverride All/2' /etc/apache2/sites-available/default
但這並沒有改變任何東西。 接下來我應該嘗試什么?
這就是使用sed
可以做到的。
sed -i ':a;N;$!ba;s/AllowOverride None/AllowOverride All/2' /etc/apache2/sites-available/default
否則,可以使用negative lookahead
來完成,如下所示,但sed
不支持。
圖案
AllowOverride None(?![\s\S]*AllowOverride None)
替代
AllowOverride All
您可以使用awk執行此操作:
awk '/AllowOverride/ && ++i==2 {sub(/None/,"All")}1' /etc/apache2/sites-available/default
當“ AllowOverride”匹配時, i
遞增。 在第二場比賽中,將“無”替換為“全部”。 腳本末尾的1
是用於打印每一行的常用速記(因為它的計算結果為true)。 要覆蓋原始文件,可以將輸出重定向到一個臨時文件:
awk '...' > tmp && mv tmp /etc/apache2/sites-available/default
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.