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

我有这样的文本文件的目录:

listedname_ _email@domain.com__subject_date.eml 

在“email”部分,文件名保证有这个模式:

 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> 

没有前导或尾随下划线,没有电子邮件主体,没有主题等(用逗号分隔的列表也是可怕的,但不是必要的)。

有人可以帮我使用正则expression式/ grep命令吗? 谢谢!

我想我已经理解你的问题了。 如我错了请纠正我。 看来你有两个选择来“获取”电子邮件地址:

  1. 使用文件名,并应用正则表达式。
  2. 使用每个文件中的From:行来获取所需的电子邮件地址。

我最喜欢第二个选项,因为查找正则表达式匹配来自: 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