0

我有两个网页,一个页面是手工创建的,另一个是用 Visual Studio 2010 (.aspx) 发布的。我想修改这些文件的内容,用一个脚本标签替换一堆脚本标签。为了实现这个目标,我只需从批处理文件中运行一些 Perl 代码。这是替换前后的 Perl 代码和 HTML:

Perl 批处理:

perl -pi.backup -e "s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s" file.aspx

HTML 输入:

<!-- <pack> -->
<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>
<!-- </pack> -->

HTML 输出:

<script src="pack.js"></script>

对于手工创建的文件,一切正常,而生成的文件不会更新,除非所有行都集中在一起。我猜这个问题来自换行符,但我不知道为什么它只对第一个文件有效,因为代码完全相同。

4

1 回答 1

0

您的问题是使用 -p 开关运行 Perl 会导致它执行每一行的代码并打印结果。因此,正则表达式一次只能看到文件的一行,并且永远无法匹配整个模式。

你可以这样做:

perl -i.backup -e "undef $/; $_=<>; s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pack.js\"><\/script>/s; print" file.aspx

它将整个文件放入$_,然后执行替换并将结果打印到同一个文件中。

于 2013-02-12T10:37:51.057 回答