perl:在Apache Virtual Host文件中添加一个新指令

时间:2012-03-14 10:04:26

标签: regex perl

对于看起来像这样的模式:

<VirtualHost 127.0.0.1:81>
  Directive1
  Directive2
</VirtualHost>

我想在Directive3之前插入一个字符串为</VirtualHost>的新行。请注意,它们可以是文件中的多个<VirtualHost/>声明,但它们都具有唯一的IP:PORT对。这就是我到目前为止所做的:

perl -p -i -e 's/(<VirtualHost 127\.0\.1\.1:81>[^(<\/VirtualHost>)+])(<\/VirtualHost>)/$1\n\tDirective3\n$2/ims' $file

分解给出了:

  • <VirtualHost 127.0.0.1:81>
  • 后跟
  • 包含除</VirtualHost>
  • 以外的所有内容
  • 后跟
  • </VirtualHost>

但这与任何事情都不相符:(...

任何想法?

1 个答案:

答案 0 :(得分:1)

perl -p当时读取一行文件。您可以使用-0777使其读取整个文件。

或者你可以使用类似的东西:

perl -pE '(/<VirtualHost +127\.0\.0\.1:81>/ .. /<\/VirtualHost>/) =~ /E/ and say "\tDirective3"'