perl -p -i -e 'commnad'2006年09月12日 11時59分57秒


perl -p -i -e 's/SOMETHING/ANOTHER/g' files

perl で sed コマンドと等価の動作をしながら、ファイルを直接編集する方法。

sh -c 'for i in files;
  do sed 's/SOMETHING/ANOTHER/g' $i
    > /tmp/sed.XXX && 
  cat /tmp/sed.XXX > $i;
done'

perl を使う唯一の理由。大量のファイルを更新する必要があるときに、sed をループ内で呼び出すとプロセスの生成とファイルのリダイレクトで遅くなるので。perl は肌に合わないみたいで、sed の変わりとしてのみ perl でプログラムを書く。

VOS 上ではその違いはとても顕著だが、unix 上でも歴然とした差が出る。

次回

コメント

_ takanyon ― 2006年09月13日 21時49分07秒

いつも楽しく拝見しています。
FreeBSD 4.7以降のsedにも-iオプションがあります。

sed -i "" -e 's/SOMETHING/ANOTHER/g' files

_ uyota ― 2006年09月15日 13時04分08秒

ありがとうございます。

FreeBSD の sed には、そのような拡張がなされていたのですね。気が付きませんでした。

sed の様な古典的なコマンドの機能拡張は、システム間の互換性が無いので気を付ける必要はありますね。

export TMP=/tmp が出来ない /bin/sh で驚いたことがあります。*BSD などでは、当然の様に出来ていたので。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/09/12/521118/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。