我有一些Perl脚本的问题.它修改文件的内容,然后重新打开以写入文件,并在此过程中丢失一些字符.所有以'%'开头的单词都将从文件中删除.这很烦人,因为%表达式是对话框的可变占位符.
你知道为什么吗?源文件是具有默认编码的XML
这是代码:
undef $/;
open F, $file or die "cannot open file $file\n";
my $content = <F>;
close F;
$content =~s{status=["'][\w ]*["']\s*}{}gi;
printf $content;
open F, ">$file" or die "cannot reopen $file\n";
printf F $content;
close F or die "cannot close file $file\n";
Run Code Online (Sandbox Code Playgroud)
bri*_*foy 26
你在printf那里使用它认为它的第一个参数是一个格式字符串.有关详细信息,请参阅printf文档 当我遇到这种问题时,我总是确保我正确使用这些功能.:)
你可能只想打印:
print FILE $content;
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您不需要读取整个文件,因为您的替换不会跨行.不要一次尝试读取和写入相同的文件名,而是使用临时文件:
open my($in), "<", $file or die "cannot open file $file\n";
open my($out), ">", "$file.bak" or die "cannot open file $file.bak\n";
while( <$in> )
{
s{status=["'][\w ]*["']\s*}{}gi;
print $out;
}
rename "$file.bak", $file or die "Could not rename file\n";
Run Code Online (Sandbox Code Playgroud)
这也减少了这个命令行程序:
% perl -pi.bak -e 's{status=["\']\\w ]*["\']\\s*}{}g' file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |