从许多文本文件的电子邮件地址解析脚本

时间:2019-03-19 22:02:35

标签: powershell parsing

我有338个.log文件的集合。这些只是基本的文本文件,没有两个文件具有相同的文件名(但所有文件名均以“ rrm-”开头)。这是它们包含的数据的示例:

Receiving message #1 : OK (4480 bytes)
From: <djerry@domain.com>
Subject: 2-303-468-02
Message-ID: <PRODVAPP21XvCsLCXPI0035acee@prod.domain.com>
Forwarding to "Some User" <someuser@somedomain.com> : OK

我需要一个脚本一次打开每个文件,仅解析“发件人:”行(可能是10,可能是1000s)以仅提取<和>字符之间的电子邮件地址,并编写输出到单个文本文件,每行一个电子邮件地址。我不关心的其余数据。我也不关心验证电子邮件地址。生成的文本文件将如下所示:

djerry@domain.com
bob@domain.com
tom@blah.com
jerry@yada.com

我不是程序员,我只有在尝试时才知道如何打破常规。我什至不知道我需要为此使用什么软件/实用程序。我正在使用Windows 10计算机。那么也许是Powershell脚本?很抱歉遇到这样的n00b问题,我真的很讨厌因为不知道如何使用Google或无法通过Google搜索简单的解决方案而感到愚蠢。感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

尝试以下操作:

Select-String -Pattern '^From: .*?<(.+?)>' -Path rrm-* |
  ForEach-Object { $_.Matches.Groups[1].Value } > output.txt
  • ^From: .*?<(.+?)>是一个正则表达式(正则表达式),用于查找以From:开头的行并捕获<>之间的行。

    • .*?部分用于解释<...>括起来的电子邮件地址前面的(可选)实际名称,这很常见;例如"Dana Jerry" <djerry@domain.com>谢谢TheMadTechnician
  • $_.Matches.Groups[1].Value检索捕获的内容。

  • > output.txt将结果保存到文件中。