I ♥ WordPress

[時間割:Perl]『ミニマルPerl』その4
2008/10/06 22:40 posted by kunkichi

風邪も落ち着いたので今週からまたがんばります!月曜日は『Perl』です。次はPerlでいろいろな*grepコマンドの機能を実装しようという話です。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 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*
      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
      ディレクトリは無視してyum.confファイルの中身だけを参照してくれる。
    • シェルだとシングルクォートのネストはできないので、文字列エスケープ(¥047)を使えばOK。Perlでは普通にバックスラッシュでエスケープできるけど、コマンドラインから実行する場合はあくまでもシェルの制約内。

最近は意識して、仕事でもgrepが使えるケースでもPerlで書いてみるようにしてるので大分なれてきたな〜、この調子この調子。

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

トラックバックURL





このページの先頭へ