0

我有一个日志文件,其中列出了很多字段。我想从文件中提取字段,但我不想逐行搜索文件。

我有我的模式:

$pattern="Hostname \(Alias\):(.+)\(.+Service: (.+)"

这将为我提供我需要的两个值。我知道如果我有一个字符串,并且我正在寻找一个匹配项,我可以使用 $matches 数组来查找字段。换句话说,如果我使用字符串变量 $line 查看文件中的一行,我可以使用此代码提取字段。

if($line -matches $pattern){
  $var1=$matches[1]
  $var2=$matches[2]
}

但是如何在不逐行搜索的情况下获得这些值?我想将整个文件作为单个字符串传递,并将我提取的值添加到两个不同的数组中。

我正在寻找类似的东西

while($filetext -match $pattern){
  $array1+=$matches[1]
  $array2+=$matches[2]
}

但是,如果只有一个匹配项,这段代码就会让我陷入无限循环。那么有没有可以使用的 nextMatch 函数?

4

1 回答 1

2

PowerShell 2.0 通过将-AllMatches参数添加到Select-Stringcmdlet 来解决此限制,例如:

$filetext | Select-String $pattern -AllMatches | 
    Foreach {$_.Matches | Foreach {$_.Groups[1] | Foreach {$_.Value}}}
于 2012-08-09T02:49:46.890 回答