使用正则表达式跨多行替换文本块的Perl命令行

时间:2016-05-29 18:43:14

标签: regex perl

我有一堆html文件需要替换以下文字:

<div id="header">
plus all info between
<!-- end #header -->

<?php include ("header.php"); ?>

我以为我可以运行这样的东西,但它与文本不匹配:

perl -p -i.bak -e 's/<div id="header">.*<!\-\- end #header \-\->/<\?php include \("header\.php"\); \?>/g' *.html

perl -p -i.bak -e 's/<div id="header">[\S\s\n]*<!\-\- end \#header \-\->/<\?php include \("header\.php"\); \?>/img' *.html

我不知道它是不是在多行中搜索而且我需要一个参数,或者我没有正确地转义字符。任何帮助将不胜感激。

我想在目录中批量运行它,并在适当的时候更改每个文件中的所有内容。

编辑:寻找单个命令行版本,如果可能的话,不要使用多个pl文件。

1 个答案:

答案 0 :(得分:1)

您可以使用-0选项设置记录分隔符。像这样:

perl -0pe 's/.../.../g' *.html

这会将记录分隔符设置为NUL字符,以便立即读取整个文件,而不是逐行读取。