Tips記事
» 2002年07月03日 00時00分 UPDATE

テキストファイル内の特定文字列を一括置換させたい〜Perl編〜

[木田佳克,ITmedia]

 ファイル内の特定の文字列を置換させたい場合には、sedを使用するのが容易だ。「テキストファイル内の特定文字列を一括置換させたい」Tipsでも紹介をしている。

 次の例では、input.txtを読み込み、シングルクォートを削除してからoutput.txtに書き出すという指定になる。

$ sed -e 's/\'//g' input.txt > output.txt

 ただし、sedを利用する方法では元ファイルを書き換えることができない。大量のファイルを扱う場合には、上記のように新たなファイルが多数作成されることになるのだ。

 そこで便利なのが、次のようにPerlのワンライナーを使用方法である。

$ perl -p -i.bak -e 's/\'//g' *.html

 上記の指定は、コマンドラインからPerlを実行(-e)し、シングルクォートで囲まれた指定(-e)が暗黙にWhileループで動作することになる。

 「-i」オプションは、入力元ファイルに拡張子「.bak」を追加してコピーしてからファイル内の置換を行うという指定だ。以上を要約すると、同階層に存在する拡張子htmlのファイルを、ファイル名.html.bakというファイル名でコピーしてから、コピー元のファイル内のシングルクォートを削除するという指定になる。

 もしも、何か不具合があった場合には、特定のファイルを次のように指定すれば元通りに復帰が可能だ。

$ mv xxxx.log.bak xxxx.log

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ