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秒
_ uyota ― 2006年09月15日 13時04分08秒
FreeBSD の sed には、そのような拡張がなされていたのですね。気が付きませんでした。
sed の様な古典的なコマンドの機能拡張は、システム間の互換性が無いので気を付ける必要はありますね。
export TMP=/tmp が出来ない /bin/sh で驚いたことがあります。*BSD などでは、当然の様に出来ていたので。
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/09/12/521118/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
FreeBSD 4.7以降のsedにも-iオプションがあります。
sed -i "" -e 's/SOMETHING/ANOTHER/g' files