在 perl 中搜索并替换 html 文件中的字符串

Search and replace String from html file in perl

我是初学者,因为 perl.I 必须从 html 文件中搜索字符串 John,我必须替换 text.I 已经完成的文本已被替换,但它没有保存在 file.I 中附上了我的代码 tried.Thanks!.

 #!/usr/bin/perl
 use strict;
 use warnings;
 my $file = 'index.html';
 open my $fh, '<', $file or die "Could not open '$file' $!\n"; 
 while (my $line = <$fh>) {
 chomp $line;
 if($line =~ /John/){
 $line =~ s/John/Bush/ig;
 print $line;
 }
 }
 close($fh);

不,不会。您正在读取文件并对内存中的数据进行搜索和替换。然后你 print 将线路连接到 STDOUT。

如果你想这样做,那么你可以使用 perl 作为一种使用 -pi 标志的 super-sed。 (看看perlrun

或者您需要自己处理 reading/writing 数据。

例如:

#!/usr/bin/perl
use strict;
use warnings;
my $file = 'index.html';
open my $fh, '<', $file or die "Could not open '$file' $!\n";
open my $output_fh, '>', $file . ".new" or die $!;
while ( my $line = <$fh> ) {
    $line =~ s/John/Bush/ig;
    print {$output_fh} $line;
}
close($fh);
close($output_fh);

应注意 - 您不需要 'if',因为如果没有初始匹配,'sed style' 替换 (s/sometext/othertext) 将不会执行任何操作。您也不需要 chomp 因为它会去除换行符 - 如果您正在修改文件,您将希望再次将它们放回去。 (可能!)

编辑:对于奖金积分,这也应该满足您的要求:

perl -pi.bak -e 's/John/Bush/gi' index.html

您必须打开一个新文件进行写入并将替换的文本打印到其中。

#!/usr/bin/perl
 use strict;
 use warnings;
 my $file = 'index.html';
 open my $fh, '<', $file or die "Could not open '$file' $!\n"; 
 open my $fh1, '>', $file."new" or die "Could not open '$file' $!\n"; 
 while (my $line = <$fh>) {
 chomp $line;
 if($line =~ /John/){
 $line =~ s/John/Bush/ig;
 }
 print $fh1 $line;
 }
 close($fh);
 close($fh1);