从日志的一行中检索多个字符串

时间:2018-06-05 10:10:04

标签: regex powershell

我在ACS.txt创建了一个巨大的Kiwi报告,我想:

ID具有设置字符串"RADIUS Accounting"然后....

的特定行

...从这些行中获取两个值"User-ID=XXXXXXXX@domain.com""MAC=xx-xx-xx-xx-xx-xx-xx-xx",然后在txt中输出。

这就是我现在所拥有的

Get-Content C:ACS.txt | ForEach-Object { 
    $null = $_ -match "RADIUS Accounting",\s.*User-Name=(?<user>[0-9]+@domain.com).*Calling-Station-ID=(?<mac>([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})).*"; $matches.user; $matches.mac
}

我认为它给了我想要的东西,它只是在一个长列表中,而不是每行的用户/ mac。

1 个答案:

答案 0 :(得分:0)

如何使用Select-String并迭代找到的(子)匹配
构建一个可以导出或查看的新PSCustomObject

$UserMac = Select-String -Path C:ACS.txt -Pattern "RADIUS Accounting.*User-Name=([0-9]+@domain.com).*Calling-Station-ID=(([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2}))" |
    ForEach-Object{
        [PSCustomObject]@{
            User = $matches.Groups[1].Value
            Mac  = $matches.Groups[2].Value
    }
}
# $UserMac
$UserMac | Out-Gridview
# $UserMac | Export-Csv .\UserMac.csv -NoType