月曜日, 9月 06, 2010

Perlワンライナー:特定のアドレスを含むメールファイル

2010/02/17perlfreak.vox.comより転載)
1メール1テキストファイルとして、メールファイルのあるディレクトリで

$ perl -0777 -ne 'split(/\n\n/, $_);print $ARGV . "\n" if ($_[0] =~ /\nFrom: (.+?)\n[A-Z]/ism and $1 =~ /hoge@foo\.bar/ism)' *


を実行すると、From: に hoge@foo.bar を含むファイル名が出力される。
perlコマンドのオプション「-0777」は、標準入力からのデータを改行で分割して読み込まない。

split(/\n\n/, $_);

は、標準入力から一気に読み込んだデータを空行で分割して無名配列に格納している。
その最初の要素がメールヘッダーになる。
正規表現は、From: が複数行になる場合を考慮。

0 件のコメント: