2016-01-20 56 views
-1

下的文件我有以下命令:在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; 
    } 
} 
+2

你的模式是什麼? – Sobrique

+2

重新編輯1,這不適用於Windows,因爲它沒有匿名文件。 – ikegami

回答

1

你錯了;在Windows和Unix系統上工作原理相同。在任何一種類型的系統上,如果模式完全匹配每行(包括換行符),則只會得到您描述的行爲。

>echo foo>file 

>echo bar>>file 

>echo moo>>file 

>perl -pi.bak -e "s/o//" file 

>type file 
fo 
bar 
mo