Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl替换因多行错误而失败_Perl_Batch File_Line Breaks_Substitution - Fatal编程技术网

Perl替换因多行错误而失败

Perl替换因多行错误而失败,perl,batch-file,line-breaks,substitution,Perl,Batch File,Line Breaks,Substitution,我有两个网页,一个是手工创建的,另一个是用visual studio 2010(.aspx)发布的。我想修改这些文件的内容,用一个脚本标记替换一堆脚本标记。为了实现这个目标,我只需从批处理文件中运行一些Perl代码。以下是替换前后的Perl代码和HTML: 批处理中的Perl: perl -pi.backup -e "s/<!--\s*<pack>\s*-->.*?<!--\s*<\/pack>\s*-->/<script src=\"pac

我有两个网页,一个是手工创建的,另一个是用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
perl-pi.backup-e“s/*?///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>


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

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

你可以这样做:

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

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

谢谢,它可以工作!您能解释一下为什么我的版本适用于这两个文件中的一个吗?@wared,您手工创建的文件可能存储了Perl无法识别的不同格式的换行符。