回答編集履歴

1 誤記修正

KojiDoi

KojiDoi score 6794

2017/12/15 18:59  投稿

> 最終的にファイルを置換して上書き保存したい
awkライクな上書きを実現するコマンドラインオプションが存在します。
これを使うと題意のようなケースではかなりのスクリプトの短縮化が図れるので、ワンライナーで手早く処理したい場合に重宝します。
ここでは対象データファイルをtest.txt、スクリプトをtest.plとして説明します。
test.plは次のような形になります。
```perl
BEGIN{  
#!/usr/bin/perl
use strict;
my $sr1;
my $sr2;
BEGIN{
 $sr1="123";
 $sr2="456"; 
}
s/$sr1/$sr2/;
```
これを次のように実行します。
```sh
$ perl -p -i.bak test.pl test.txt
```
-pオプションは、スクリプトの前後にwhile(<>){と}があるものとして処理してくれます。
-i.xxxオプションは、元ファイルのバックアップを拡張子.xxxを付けた形で保存しつつ、対象ファイルをスクリプトの実行結果で置き換えてくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る