如何在Perl中replace现有文件中的string?

我想在名为1_classification.dat,2_classification.dat等的所有文本文件中将“blue”replace为“red”。 我想编辑相同的文件,所以我试过这个代码,但它不起作用。 我哪里错了?

@files=glob("*_classification.dat"); foreach my $file (@files) { open(IN,$file) or die $!; <IN>; while(<IN>) { $_='~s/blue/red/g'; print IN $file; } close(IN) } 

有没有单行的错误?

 $ perl -pi.bak -e 's/blue/red/g' *_classification.dat 

说明

  • -p进程,然后逐行打印<>
  • -i激活就地编辑。 使用.bak扩展名备份文件
  • 正则expression式replace将逐行地作用于隐式variables,即文件内容

$_='~s/blue/red/g';

呃,什么?

只是

 s/blue/red/g; 

或者,如果你坚持使用一个variables(这在使用$ _时是不必要的,但我只想显示正确的语法):

 $_ =~ s/blue/red/g;