簡體   English   中英

Bash:如何在文件中的特定位置插入一行?

[英]Bash: How can I insert a line to a specific location within a file?

我正在自動在公司中創建虛擬主機的過程,我想添加以下內容: ServerAlias sitename.booking.local到一個名為sitename.com.conf的文件中,該文件如下所示:

<VirtualHost *:80>
   ServerName www.sitename.com
   ServerAlias sitename.com
   ServerAlias sitename.booking.local
   DocumentRoot /site/http/travel/itn
   CustomLog logs/access_sitename_log combined
   DirectoryIndex default.php index.php index.html index.phtml index.cgi index.htm
   ScriptAlias /awstats/ /usr/local/awstats/wwwroot/cgi-bin/
   <Directory /site/http/travel/itn >
      AllowOverride All
   </Directory>
</VirtualHost>

我希望該行位於<virtualhost></virtualhost> ,並將其添加到文件中的最后ServerAlias行下,如何實現?

這個awk應該工作:

awk  -v a="mysite" '/<VirtualHost /{v=1}
     v && /^ *ServerAlias/{{$0="   ServerAlias " a ".booking.local" RS $0; v=0} 
     /<\/VirtualHost>/{v=0} 1' file

可能輸出:

<VirtualHost *:80>
   ServerName www.sitename.com
   ServerAlias sitename.booking.local
   ServerAlias sitename.com
   DocumentRoot /site/http/travel/itn
   CustomLog logs/access_sitename_log combined
   DirectoryIndex default.php index.php index.html index.phtml index.cgi index.htm
   ScriptAlias /awstats/ /usr/local/awstats/wwwroot/cgi-bin/
   <Directory /site/http/travel/itn >
      AllowOverride All
   </Directory>
</VirtualHost>

假設我們要在文檔的某個位置插入一行,那么您可以使用sed這樣添加到第四行:

sed '4a\     ServerAlias sitename.booking.local' myfile.xml > myfile.xml

如果文件結構將來可能會更改,這顯然很危險,讓我們在ServerName之后添加此行即可,就像

sed -i 's/ServerName www.sitename.com/ServerName www.sitename.com\\n   ServerAlias sitename.booking.local/g' myfile.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM