[時間割:Perl]『ミニマルPerl』その4
2008/10/06 22:40 posted by kunkichi
風邪も落ち着いたので今週からまたがんばります!月曜日は『Perl』です。次はPerlでいろいろな*grepコマンドの機能を実装しようという話です。
ミニマルPerl Unix/LinuxユーザのためのPerl習得法
posted with amazlet at 08.10.06
Tim Maher
オライリージャパン
売り上げランキング: 96883
オライリージャパン
売り上げランキング: 96883
- *grepの代わりにPerlを使うと方言を統一できる。
- *grepだと特定のメタキャラクタが使えたり使えなかったり(単語境界の¥bとか)
- *grepごとの正規表現の方言の違いがあったり
- 制御文字用のエスケープが豊富。
- *grepだとあったりなかったり
- タブを表すのに、Ctrl+V+タブとかで実際に打つよりも長い、とか。
- ¥dとか¥tとかコンパクトに表せる
- その他の正規表現の方言も考えなくてよい
- 繰り返し、より便利な後方参照、メタキャラクタ自体のクォート、コメントの挿入、もっと高度なものまで。
- マッチング機能
- レコードの単位を段落にしたりファイルにしたり
- 行をまたいでマッチング
- バイナリも扱える
- ディレクトリは自動的に無視
- 拡張機能
- マッチした部分を正規表現の外側で参照
- 出力レコードのセパレータを変更して出力をカスタマイズ
- マッチ演算子
- 通常は/〜/で$_に対するマッチング
- mで始めるとデリミタを変更できる。%をデリミタにすると、
m%〜% - =~で変数に対するマッチング。もちろんここでもデリミタは変更できる
$str =~ /example/$str =~ m|example| - 1行だとこんな感じ
$ perl -wnl -e '/example/ and print;' /tmp/sample.txt$ cat /tmp/sample.txt | perl -wnl -e '/example/ and print;' - -nと-pはディレクトリを無視してくれる。例えば/etc/yum*を参照する場合、
$ ls -td /etc/yum*ディレクトリは無視してyum.confファイルの中身だけを参照してくれる。
drwxr-xr-x 3 root root 4096 7月 20 20:43 /etc/yum
drwxr-xr-x 2 root root 4096 7月 16 00:46 /etc/yum.repos.d
-rw-r--r-- 1 root root 346 6月 22 09:35 /etc/yum.conf
$ perl -wnl -e '/yum/ and print;' /etc/yum*
cachedir=/var/cache/yum
logfile=/var/log/yum.log
# Note: yum-RHN-plugin doesn't honor this.
# in /etc/yum.repos.d - シェルだとシングルクォートのネストはできないので、文字列エスケープ(¥047)を使えばOK。Perlでは普通にバックスラッシュでエスケープできるけど、コマンドラインから実行する場合はあくまでもシェルの制約内。
最近は意識して、仕事でもgrepが使えるケースでもPerlで書いてみるようにしてるので大分なれてきたな〜、この調子この調子。







コメント&トラックバック
トラックバックURL: