1_classification.dat、2_classification.datなどの名前のすべてのテキストファイルで、Wordの「青」を「赤」に置き換えたいと思います。同じファイルを編集したいので、このコードを試しましたが、機能しません。どこがおかしいの?
@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
拡張子を使用してバックアップされますここでの既存の回答はどれも、スクリプト(ワンライナーではない)からこれを行う方法の完全な例を提供していません。ここに私がやったことがあります:
rename($file, $file.'.bak');
open(IN, '<'.$file.'.bak') or die $!;
open(OUT, '>'.$file) or die $!;
while(<IN>)
{
$_ =~ s/blue/red/g;
print OUT $_;
}
close(IN);
close(OUT);
$_='~s/blue/red/g';
あ、何?
ただ
s/blue/red/g;
または、変数の使用を主張する場合($ _を使用する場合は必要ありませんが、正しい構文を表示したいだけです):
$_ =~ s/blue/red/g;