【问题标题】:Regex: Filter string正则表达式:过滤字符串
【发布时间】:2014-05-23 12:12:02
【问题描述】:

对于其他进程,我想将以下行拆分为对象。 该行来自我们的 Exchange 传入 SMTP 日志文件。

2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <prvs=0220d28471=user@domain.eu>

可以用正则表达式做到这一点吗?

期望的输出:

Time: 08:38:58
Connector: Exchangeserver\External Relay
ExchangeID:08D1437A9AEFF27B
MailFrom:user@domain.eu

对不起,但是正则表达式对我的大脑来说太重了.. :(

非常感谢!

【问题讨论】:

    标签: regex powershell powershell-2.0 exchange-server-2010


    【解决方案1】:

    电子邮件地址只需要正则表达式。您可以使用-split 拆分列:)

    $arr = @("2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <prvs=0220d28471=user@domain.eu> " -split ",")
    
    $ht = [ordered]@{}
    $ht["Time"] = $arr[0]
    $ht["Connector"] = $arr[1]
    $ht["ExchangeID"] = $arr[2]
    $ht["MailFrom"] = $($arr[7] -match "([^=@]+@[^>]+)" | Out-Null; $matches[1])
    
    $ht
    

    然后您可以格式化哈希表中的结果以获得所需的输出。

    【讨论】:

    • 好的..我将在进一步的任务中使用-split!但是 Exchange 2010 与 PowerShell V3 不兼容,因此 [ordered] 不可用。不知道是否有必要,但第二行(日期时间)在我们的 2008R2 服务器上不起作用。在 Windows 8.0 上它可以工作,但输出是: Name Value ---- ----- Time 12:00:00
    • @Daniel4711 有人编辑了我的答案,我没有施放时间。如果要提取时间,请找到适当的格式字符串,或者只使用正则表达式。截至[订购]:没有必要。哈希表不保证保留项目的顺序,但这不是问题,无论如何,您可能会通过键显式引用值。
    【解决方案2】:
    $line = 
    '2014-05-23T08:38:58.869Z,Exchangeserver\External Relay,08D1437A9AEFF27B,5,192.168.100.211:25,192.168.100.211:46964,<,MAIL FROM: <prvs=0220d28471=user@domain.eu>'
    
    $regex = '^[0-9-]+T([0-9:]+).+?,(.+?),(.+?),.+?MAIL FROM: <.*?(\w+@\w+?\.\w+)>'
    
    $line | 
     New-PSObjectFromMatches -pattern $regex -Property $null,Time,Connector,ExchangeID,MailFrom |
     format-list
    
    
    Time       : 08:38:58
    Connector  : Exchangeserver\External Relay
    ExchangeID : 08D1437A9AEFF27B
    MailFrom   : user@domain.eu
    

    您可以在此处获取 New-PSObjectFromMatches 函数:

    http://gallery.technet.microsoft.com/scriptcenter/New-PSObjectFromMatches-87d8ce87

    【讨论】:

    • +1 很棒的功能!您总是在需要时重新创建其中一个代码块,但从不记得保存。终于把它保存了:D
    • 谢谢(试试-debug)!
    • 感谢您的提示,但修改 $Regex 很难。 -Split没那么强大,但是好用!
    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2013-09-23
    • 2020-05-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多