我正在尝试进行自动构建,并在其中使用Perl来更新文件中的某些路径。
具体来说,在html文件中,我想采用下面显示的块
<!-- BEGIN: -->
<script src="js/a.js"></script>
<script src="js/b.js"></script>
<script src="js/c.js"></script>
<!-- END: -->
并将其替换为
<script src="js/all.js"></script>
我尝试过几个正则表达式:
perl -i -pe 's/<--BEGIN:(.|\n|\r)*:END-->/stuff/g' file.html
或刚刚开始:
perl -i -pe 's/BEGIN:(.|\n|\r)*/stuff/g' file.html
但我似乎无法超越第一线。有什么想法吗?
答案 0 :(得分:2)
perl -i -pe 's/<--BEGIN:(.|\n|\r)*:END-->/stuff/g' file.html
这太接近了。
/s
修饰符匹配,即可.
匹配任何字符,包括换行符。<!--
开始匹配,请注意!
。.*?
标记,则需要END
之类的非贪婪匹配。这将导致以下替换:
s/<!--\s*BEGIN:.*?END:\s*-->/stuff/sg
正如@plusplus指出的那样,-p
遍历每一行。让我们将Perl的“线”概念改为“立即整个文件”:
BEGIN { $/ = undef }
或使用-0
命令行开关,不带数字参数。