对于看起来像这样的模式:
<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>
但这与任何事情都不相符:(...
任何想法?
答案 0 :(得分:1)
perl -p
当时读取一行文件。您可以使用-0777
使其读取整个文件。
或者你可以使用类似的东西:
perl -pE '(/<VirtualHost +127\.0\.0\.1:81>/ .. /<\/VirtualHost>/) =~ /E/ and say "\tDirective3"'