3

我正在尝试进行自动构建并在其中使用 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

但我似乎无法越过第一行。有任何想法吗?

4

1 回答 1

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命令行开关,不带数字参数。

于 2013-06-18T10:53:14.293 回答