sed or Perl?

文字列の置換に sed を使っていたけれど、sed よりも Perl の方がいいんじゃないかと思ったわけです。だって Perl正規表現の方が強力だし、Perl正規表現は大体覚えているので、sed正規表現Perl との差)を覚えなくても済むから。
でも、気になるのが性能。Perlスクリプトで、sed は C で書かれているコンパイル済みのプログラムだから。そこんとこ実際どうなのよ、ってことで簡単に性能を測ってみた。

環境
OS
Ubuntu 9.04
zsh
4.3.9
sed
GNU sed 4.1.5
Perl
5.10.0
入力データ

以下の文字列を5000行。input.txt というファイルに保存。

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
コマンド

sed

sed -e 's/[A-Za-z]\+//g' input.txt > /dev/null

Perl

perl -pe 's/[A-Za-z]+//g' input.txt > /dev/null    
測定方法

time コマンドで上記のコマンドを実行する。5回実行して一番早かった時間を取得する。

結果

sed

% time sed -e 's/[A-Za-z]\+//g' input.txt > /dev/null
sed -e 's/[A-Za-z]\+//g' input.txt > /dev/null  0.10s user 0.01s system 99% cpu 0.108 total

Perl

% time perl -pe 's/[A-Za-z]+//g' input.txt > /dev/null
perl -pe 's/[A-Za-z]+//g' input.txt > /dev/null  0.01s user 0.01s system 98% cpu 0.020 total
まとめ

sed の方が速いと予想していたのだが違う結果になった。Perl の方が sed よりも5倍程速い。ユーザモードでの差が大きい。入力データ、正規表現によっては結果が変わる?
これからは Perl を使うことが多くなりそう。