ファイル内の特定の文字列を置換させたい場合には、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.