正则表达式 - 匹配文件名中的电子邮件,返回电子邮件地址列表

时间:2012-09-02 07:29:39

标签: regex windows email grep cygwin

我有一个像这样的文本文件目录:

listedname_ _email@domain.com__subject_date.eml

在"电子邮件"期间,文件名保证具有此模式。部分:

email@domain.xxx_

所以,电子邮件,at-sign,domain,period,tld,underscore。 (由于不是每个人都在他们的电子邮件客户端中设置他们的名字"他们并不总是有一个领先的下划线。)

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命令吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我想我已经理解了你的问题。如我错了请纠正我。您可以通过两种方式“获取”电子邮件地址:

  1. 使用文件名,然后应用正则表达式。
  2. 使用每个文件中的From:行来获取所需的电子邮件地址。
  3. 我最喜欢第二个选项,因为查找正则表达式以匹配来自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