Powershell从文件中提取值

问题描述:

我有一个日志文件,其中包含很多字段。我想从文件中提取字段,但我不想逐行搜索文件。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函数吗?

PowerShell 2.0中加入了-AllMatches参数为Select-String cmdlet的例如为:

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

由于解决了这个限制,这个伟大的工程。 – StaticMethod 2012-08-14 15:37:15