1

私は次のようなテキストファイルのディレクトリを持っています:

listedname_ _email@domain.com__subject_date.eml

ファイル名は、「電子メール」部分で次のパターンを持つことが保証されています。

email@domain.xxx_

したがって、電子メール、アットマーク、ドメイン、期間、tld、アンダースコア。(すべての人が電子メールクライアントで「名前」を設定しているわけではないため、常に先頭にアンダースコアが付いているとは限りません。)

Windowsのディレクトリには最大1,000個のファイルがありますが、Cygwinツールをインストールしていて、ディレクトリに移動できます。ファイルの内容にも、次のように表示されることが保証された行が含まれています。

From: "Bob Lawblog" <boblawblog@domain.law>

私がやりたいのは、grepまたはその他のツールを使用して、次の形式で電子メールアドレスのリストだけを返すことです。

email@domain.com <line break>
email2@domain.com <line break>
email3@domain.com <line break>

先頭または末尾にアンダースコア、電子メール本文、件名などはありません(コンマ区切りのリストに入れることもできますが、必須ではありません)。

誰かがそれのためのregex/grepコマンドで私を助けることができますか?ありがとう!

4

1 に答える 1

1

私はあなたの質問を理解したと思います。私が間違っている場合は私を訂正してください。メールアドレスを「取得」するには、次の2つのオプションがあるようです。

  1. ファイル名を使用して、正規表現を適用します。
  2. From:各ファイルの行を使用して、目的の電子メールアドレスを取得します。

メールアドレスに一致する正規表現を見つけるので、2番目のオプションが最も好きlistedname_ _email@domain.com__subject_date.emlです。メールアドレスに複数のアンダースコアが含まれている場合はどうなるので、注意が必要です。

各ファイル内から電子メールアドレスのリストを取得するには、次のことを試してください。

awk '/^From:/ { print substr($NF,2,length($NF)-2) }' *.txt > outfile

これらのメールアドレスのcsvをご希望の場合は、次を使用してprintfください。

awk '/^From:/ { printf "%s,", substr($NF,2,length($NF)-2) } END { printf "\n" }' *.txt > outfile
于 2012-09-02T07:57:45.867 に答える