意外と使えるコマンドラインでのPerl 「簡単な文字列置換」

2006年12月21日 オフ 投稿者: KYO
Table of Contents

たまに、複数のファイル内部のある文字を置換したい場合があります。
簡単な例で言うと、タイプミス(スペルミス)など。
そういった時に、Perlを使って簡単にテキストファイルの内容を置換する方法。

単一ファイルの置換

簡単な置換

例えば、[ letter.txt ]内で[ hello ]のスペルミスを置換する場合

$perl -p -w -e 's/helo/hello/g' letter.txt

バックアップ[ *.bak ]を作成しつつ、globを利用した複数ファイルの置換

例えば、[ letter0001.txt ~ letter9999.txt ]の10,000ファイルで[ hello ]のスペルミスを、[ .bak ]のバックアップファイルを作りながら、一括置換する場合

$perl -p -i.bak -w -e 's/helo/hello/g' letter*.txt

これが、知っていると知らないとでは大きな差に・・・。
というわけで、メモ。
ちなみに・・・・
-p は、お馴染みのプログラム(スクリプト)作成オプション
-i は、$^Iにセットされる文字列(リネームファイル名)
-w は、エラーログ出力オプション
最後の letter*.txt は、 @ARGV = glob ‘letter*.txt’; のように使用される