在 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);
我是初学者,因为 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);