2013-04-04 63 views
1

我想從使用Select-String的排序哈希表中提取某些值。使用Select-String對已排序哈希表進行迭代包括空行?

這是可行的,但爲什麼輸出中會出現多餘的空白行?

cls 

$fruits = @{"1" = "apple"; "2" = "lemon"; "3" = "orange"; "4" = "apricot"} 

foreach ($fruit in $fruits.GetEnumerator() | Sort-Object Value) { 
    $fruit.Value | Select-String -pattern "ap" -SimpleMatch 
} 

回答

0

我認爲你得到空值,因爲每個項目你做一個選擇字符串,這是在其他時間,但有時沒有返回值 - 那些沒有任何事情是空行。

嘗試這樣的事情,使用位置對象:

$fruits.Values | Sort-Object | Where-Object { $_ -match "ap" } 
+0

有趣的是,如果至少有一個匹配項,空行就會出現。 – 2013-04-04 16:26:42

+0

我認爲這些可能是先決條件和後置條件。 – mjolinor 2013-04-04 16:38:12

+0

奇怪的是,即使數組中的所有項都匹配,空白行也會出現。 '$ fruits = @ {「1」=「apple」; 「2」=「杏」}' – 2013-04-11 20:46:03

0

我使用的PowerShell 3.0。

我做的代碼

PS C:\> $fruits = @{"1" = "apple"; "2" = "lemon"; "3" = "orange"; "4" = "apricot"} 
PS C:\> $fruits.Values -like 'ap*' 
apricot 
apple 
PS C:\> 

兩行進一步調查

似乎是,當沒有匹配它返回NULL。

foreach($key in $fruits.Keys){(Select-String -Pattern 'ap' -SimpleMatch -InputObject $fruits[$key]) -eq $NULL} 

因爲它不是重定向到一個變量它只是向主機打印NULL。這是我的假設(假設)。

奇怪的...好問題。

+0

哎呀忘了排序。 '$ fruits.Values-like'ap *'| sort' – 2013-04-05 16:58:27