2012-08-08 43 views
0

我有一個日誌文件,其中包含很多字段。我想從文件中提取字段,但我不想逐行搜索文件。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函數嗎?

回答

2

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