• ベストアンサー

@のみを含む文字列を抽出

メールをエクスポートしたテキストファイルがあり、そこからメールアドレスだけを抽出したいと思っています。 Windowsで仕事をしており、とりあえずQGREPというフリーウェアを使っているんですが、「@」という文字列で検索をかけると、「@」を含む「行全体」を出力してしまいます。 出力イメージとしてはこんな感じです。 ========================================== From Postmaster@xxxx.xxxx.co.jp Mon Sep 06 05:10:13 2004 Message-ID: <20040905201013.15166.qmail@xxxxx.com> 発行人: XX XX xxxxxxx@xxxx.com ========================================== こういうファイルからメールアドレスだけを抽出する方法が分からないので、今は手作業でやっているんですが、@を含む文字列(文字の塊)だけをうまく抽出する方法はないでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

#1の方のお書きのようにperlか、少なくともsed,awk等のツールを使わないと一発では無理でしょう。perlを使うにははたくさんのファイルがインストールされますが、awkは1つのexeファイルなのでvector等で探してインストールしておくといいと思います。 awk "{for(i=1;i<=NF;++i) if($i~/@/) print $i}" 入力ファイル名 これだとメッセージIDも出力されるので、避けたければ awk "/^Message-Id/{next}{for(i=1;i<=NF;++i) if($i~/@/) print $i}" IGNORECASE=1 入力ファイル名 他には、空白を改行に置換できるエディタで事前に一語一行にしてからQGREPを使うか。

noname#257070
質問者

お礼

なるほど。 空白を改行に置換して、一語一行にしてQGREP! これはいいですね。 試してみましたが、メアド前後に< >があったり、全角空白で区切られているケースもあるので、多少工夫は必要ですが、てっとり早くて簡単でした。 awkとかはちょっと苦手なもので・・・。 Vectorなどのサイトにはメアド抽出用シェアウェアがありましたが、とりあえずご指摘の方法で対処して行きます。 ありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

メールアドレスのマッチングは、とても難しいので、 ウマくいかない場合もあるとは思いますが、 とりあえずperlで作ってみました。 address.pl while(<>){ s/ //g; print "$1\n" if /([^\<\>\s]+@[^\<\>\s]+)/ ; } >perl address.pl < output.txt で実行

noname#257070
質問者

お礼

ありがとうございました。 サーバにファイルをUPして試してみましたが、 文字化けが多々発生してうまく行きませんでした・・・。 Windowsのgrep系ツールで、文字列単位でマッチングするかどうかをサポートするソフトがあればいいんですけどねぇ・・・。

関連するQ&A