它看着你想要在现场编辑神论。 这样做的最容易的方法是使用<代码>$I和+<>
(I/Otors section:
#!/usr/bin/perl
use strict;
use warnings;
my $find = qr/s{6}seqfiles=sinfile/;
my $replace = seqfile = infil2 ;
@ARGV = ("/home/shubhi/Desktop/pamlrun/test");
$^I = ".bak"; #safe the old files as file.bak
while (<>) {
s/$find/$replace/g;
print;
}
此外,鉴于您的舱面性质,它看起来像你可能想要的<代码>[ ](mch aspace)或(match a tab)而不是s
。
您也可使用,但似乎提供后备能力:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
my $find = qr/s{6}seqfiles=sinfile/;
my $replace = seqfile = infil2 ;
tie my @lines, "Tie::File", "testdata"
or die "could not open file: $!";
for my $line (@lines) {
$line =~ s/$find/$replace/g;
}
当然,你可以把自己的支持推向File:Copy
:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
use File::Copy;
my $find = qr/s{6}seqfiles=sinfile/;
my $replace = seqfile = infil2 ;
copy "testdata", "testdata.bak"
or die "could not backup file: $!";
tie my @lines, "Tie::File", "testdata"
or die "could not open file: $!";
for my $line (@lines) {
$line =~ s/$find/$replace/g;
}
如果我没有指出,这基本上是一个方面的话,我也会被拒:
perl -pi.bak -e s/s{6}seqfiles=sinfile/ seqfile = infil2/ testdata
利用K
(0-width positive look-behind):
perl -pi.bak -e s/s{6}seqfiles=sKinfile/infil2/ testdata