我有一堆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文件。
答案 0 :(得分:1)
您可以使用-0
选项设置记录分隔符。像这样:
perl -0pe 's/.../.../g' *.html
这会将记录分隔符设置为NUL
字符,以便立即读取整个文件,而不是逐行读取。