在Perl替换命令清空的Windows
问题描述:
下的文件我有以下命令:在Perl替换命令清空的Windows
perl -pi.bak -e "s/pattern//" $file_name
当我在perl脚本执行它,它清空文件(我看到.bak文件,它不是空的) 。当我在shell中执行它时,它可以工作。可能是什么问题?
问题是在Windows下,它在Linux下正常工作。
编辑1: 我想这一个了,还清空:
sub replace_pattern_in_file
{
my ($file, $pattern, $replacement) = @_;
open my $in, "<", $file;
unlink $file;
open my $out, ">", $file;
while(my $line = <$in>)
{
$line =~ s/$pattern/$replacement/g;
print $out $line;
}
}
答
你错了;在Windows和Unix系统上工作原理相同。在任何一种类型的系统上,如果模式完全匹配每行(包括换行符),则只会得到您描述的行为。
>echo foo>file
>echo bar>>file
>echo moo>>file
>perl -pi.bak -e "s/o//" file
>type file
fo
bar
mo
你的模式是什么? – Sobrique
重新编辑1,这不适用于Windows,因为它没有匿名文件。 – ikegami