1

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

listedname_ _email@domain.com__subject_date.eml

文件名保证在“电子邮件”部分具有这种模式:

email@domain.xxx_

因此,电子邮件、at-sign、域、句点、顶级域名、下划线。(他们不会总是有一个前导下划线,因为不是每个人都在他们的电子邮件客户端中设置他们的“名字”。)

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

我想我已经理解了你的问题。如我错了请纠正我。似乎您有两个选项可以“获取”电子邮件地址:

  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
于 2012-09-02T07:57:45.867 回答