Powershell从文件中提取值

时间:2012-08-08 22:49:38

标签: powershell

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

我有我的模式:

$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函数吗?

1 个答案:

答案 0 :(得分:2)

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

$filetext | Select-String $pattern -AllMatches | 
    Foreach {$_.Matches | Foreach {$_.Groups[1] | Foreach {$_.Value}}}