【问题标题】:Bash: How can I insert a line to a specific location within a file?Bash:如何在文件中的特定位置插入一行?
【发布时间】:2014-02-06 13:54:24
【问题描述】:

我正在自动化我公司中创建虚拟主机的过程,我想将这一行: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>

我希望该行位于&lt;virtualhost&gt;&lt;/virtualhost&gt; 内,并将其添加到文件中最后一行ServerAlias 下,如何实现?

【问题讨论】:

  • 是否有任何具体原因仅将其添加到最后ServerAlias 行下?
  • 不,这不是必须的,但它必须在&lt;virtualhost&gt;&lt;/virtualhost&gt; 内,而不是在&lt;directory&gt;&lt;/directory&gt; 内。
  • 服务器别名允许在同一行有多个值..不需要换行... sed "s/ServerAlias.*/& newvalue/" -i vhostfile
  • BrenoZan:谢谢,您的评论解决了我的问题。

标签: linux apache bash


【解决方案1】:

这个 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>

【讨论】:

  • sitename.booking.local 实际上是由 $site 和 .booking.local 构建的,那么如果该站点是一个变量,那么该行的外观如何?这行得通吗? awk '/&lt;VirtualHost /{v=1} v &amp;&amp; /^ *ServerAlias/{$0=" ServerAlias $site.booking.local" RS $0; v=0} /&lt;\/VirtualHost&gt;/{v=0} 1' file
  • 请参阅上面有关如何将动态站点名称传递到变量a 的更新。
【解决方案2】:

假设我们要在文档中的某个位置插入一行,那么你可以像这样使用 sed 添加到第 4 行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多