• ベストアンサー

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

メールをエクスポートしたテキストファイルがあり、そこからメールアドレスだけを抽出したいと思っています。 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 ========================================== こういうファイルからメールアドレスだけを抽出する方法が分からないので、今は手作業でやっているんですが、@を含む文字列(文字の塊)だけをうまく抽出する方法はないでしょうか? 宜しくお願いします。

noname#257070
noname#257070

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答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

  • 文字列の抽出について

    A列に 500行位の文字列があり、 その行の中から以下を抽出したいです。 ただ、抽出したい文字列は、0123456で始まり、abcdという文字列まで。 しかも改行されています。 ※抽出したい文字列 【A列 0123456 ~ B列 abcd】という文字列 【F列 0123456 ~ B列 abcd】という文字列 A列 0123456 B列 xxxx abcd C列 1111 D列 2222 E列 3333 F列 0123456 G列 xxxx abcd H列 4444 I列 5555 J列 6666 宜しくお願い致します。

  • 文字列抽出についてご質問です。

    文字列抽出についてご質問です。 csvファイルの中に、http://hoge.com/◎◎/goods_parts/◎◎/数字1~5桁/◎◎・・・ のようなデータがずらっと1000行くらいあって、 このURLの中にある数字1~5桁が、別ファイルの1~5桁の数字だけがあるファイルと合致したら、 出力のようにしたいです。 そこで、phpかexcelvbの正規表現で、 ・数字のみを抽出するサンプルコードをおしえていただけないでしょうか。 なにとぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列から、特定の文字を削除したい

    アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか? 例えば電話番号の入力の場合、 03-xxxx-xxxx →03xxxxxxxx 077-xxx-xxxx →077xxxxxxx のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。 入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Becky!の転送設定について

    Becky!と言うメーラを使用していますが、 添付データのあるメールを転送すると本文まで添付され、 本文自体は Forwarded by "X.XXXXXXXX" <XXXXXXX@XXXX.XXX.XX.XX> ----------------------- Original Message ----------------------- From: XXXXXXX@XXXX.XXX.XX.XX To: XXXXXXX@XXXX.XXX.XX.XX, XXXXXXX@XXXX.XXX.XX.XX Date: Mon, 1 Nov 2004 15:08:58 +0900 Subject: ○○○の件 ---- ** メッセージの内容は添付ファイルを参照して下さい ** --------------------- Original Message Ends -------------------- と記入されます。 転送するメールの本文は引用され、 転送するメールに添付してきたデータは添付されるように設定したいのですが、どこを設定すればよいかわかりません。 どなたか教えてください。よろしくお願いします。

  • セル内の数字も混じった文字列から特定パターンの数字列を取り出す

    またまたお世話になります。  (1)セル内に1つまたは2つのハイフンでつながる数字列を含む文字列(ブランクも含みます)がある場合にそこからその数字列のみを取り出す方法をアドバイス願います。  例 cを文字、xを数字(最大7桁)とします。 セル内の文字列 cccccc cccc cccc xxxxxxx-xx-x ccccccc cccc cccc からxxxxxxx-xx-x を取り出して文字列として別のセルに置く方法です。 (2) もしこのxxxxxxx-xx-x が[ と ] で囲まれていた場合はもう少し容易になりますか?  よろしくお願いします。  

  • Excelで文字列の抽出をしたいので教えてください

    Excelで下記の文字列を抽出したいのですがどなたか教えてください 例) - abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出 -- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出したいのですが宜しくお願いします

  • 特定の文字列の抽出について

    GGACTTTCA・・・のようにゲノム塩基配列の一部が記してあるファイルから、4個の文字列に、それを逆順にした文字列が続いたもの(CCAGGACC、TGCCCCGTなど)を抽出したプログラムを作成したいのですが、上手く結果が出力できません。 おそらく、最初の任意の4文字を配列に入れ、後半の4つの部分に逆にして入れると思いました。ですが、配列に入れる方法、配列に入れた文字を逆に出力する方法、文字を4つ(もしくは8つ)に限定する方法がわからず、プログラムが動きません。 方法について、意見アドバイス等よろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字列の抽出がうまくできません

    こんにちは。Perl初心者です。みなさんのお力をお借りしたく、初めて投稿させていただきました。よろしくお願いします。 現在、ファイルから特定した行を抽出し、その行に含まれる文字列を抽出しようとしているのですが、その文字列の抽出がうまくできません。 <文字列を含むファイル:xxx.txt> -------------------------- To 鈴木 太郎さん 1行目 : 01,りんご, 3 個, ナシ, 1個 14行目 02,キャベツ, 3 個, なす, 10本 15行目 : -------------------------- <スクリプトファイル:yyy.pl> -------------------------- open(DAT, "./xxx.txt") || die("can't open file : ($!)"); @file = <DAT>; close DAT; if ( $file[0] =~ /(\W+\s)(\W+)/ ) { print "$1\n"; } print "$file[13]\n"; print "$file[14]\n"; -------------------------- <結果> -------------------------- 鈴木 -------------------------- 抽出したい結果は「鈴木 太郎」なんですが、上記のような結果(「1byteのスペース」鈴木「2byteのスペース」)になってしまいます。xxx.txtの「To」と「鈴木」の間と、「鈴木」と「太郎」の間にはそれぞれ1byteのスペースがあります。どうやったら「鈴木 太郎」と抽出できるか教えてください。 スクリプトは「Copal2(ver2.77)」というツールを使って作りました。そのツールではエンコードは「自動判別」となっており実際何が使われているのか分かりません。 また他にも質問があります。 今抽出したい行を指定して出力させてますが、 「To」から始まる行 「01」といった2桁の数字から始まる行 というような抽出の仕方をしたいのですが可能でしょうか? 本当に初心で大変恐縮ではありますが、教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて

    ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて 例のようにA列の文字の中からカッコ内(4桁数字“ハイフン”7桁数字)を B列に表示するにはどうしたらよいでしょうか。 ちょっと面倒なのはカッコは複数ある場合があり(xxxx-xxxxxxx)の条件に 合ったものだけを隣のセルに表示したいのです。 カッコとカッコ内は半角でxは不特定な数字です。 (例) A1=あいうえお(abcde)かきくけこ(xxxx-xxxxxxx)さしすせそ B1=xxxx-xxxxxxx よろしくお願いいたします。

  • アプリケーションのログファイルから、特定文字列を抽出し、

    アプリケーションのログファイルから、特定文字列を抽出し、 一致する場合ユーザ名とアクションをまとめたcsvファイルに出力をさせるvbsを作成したいのですが、 いろいろと調べても殆どが結果に結びついていません。 イメージは以下のようなものになります。 インプットファイル(ログファイル)には、以下のように出力されています。 20100601 USER1 update 20100601 USER2 logon 20100601 USER3 delete . . . . このファイルから、たとえばupdateを抽出し、その行にupdateの文字列が含まれていたら、 行内にあるUSER1を抽出させます。 処理が終わったら、以下イメージのCSV出力ファイルを作成します。 DATE,USERNAME,logon,update,delete 20100601,USER1,0,1,0 20100601,USER2,1,0,0 20100601,USER3,0,0,1 集計はエクセルを使用するのでカウントはせず、フラグ(1)を立てるだけをイメージしています。 updateの文字列は実際には記号等が含まれるので、grepのような正規表現にて抽出しないと難しい と思うのですが、vbsでのgrepがちょっとよくわかりません。 http://okwave.jp/qa/q5973058.html 上記アドレスで同じような質問がされていたのですが、 記載内容を実行してもエラー出力されてしまったため、質問させて頂きました。 なにとぞよろしくお願い致します。

専門家に質問してみよう