を置き換えることができます。あなたはおそらく[ ]
をしたいよう
また
#!/usr/bin/perl
use strict;
use warnings;
my $find = qr/\s{6}seqfile\s=\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;
}
、あなたの正規表現の性質を考えると、それが見える:これを取得する最も簡単な方法は、@ARGV
プラス<>
の魔法で$^I
を使用することです(I/O Operators sectionでヌルファイルハンドルを探してください) (空白に一致する)または\t
(タブに一致)は\s
ではありません。 \s
は、タブ、スペース、およびその他の空白文字と一致します。
またTie::File
を使用することができますが、バックアップ機能を提供していないようです。もちろん
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
my $find = qr/\s{6}seqfile\s=\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}seqfile\s=\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;
}
を
これは基本的に1ライナーであることを指摘していなければ私はまた悔しい思いです。
perl -pi.bak -e 's/\s{6}seqfile\s=\sinfile/ seqfile = infil2/' testdata
は、これは(ゼロ幅の正のルックビハインド)\K
を利用することにより、5.10をさらに短縮することができます。
perl -pi.bak -e 's/\s{6}seqfile\s=\s\Kinfile/infil2/' testdata
私はタイが::簡単にファイルを見つけます。 – Svante