это использует строковый метод .Split()
для разделения на пробелы, затем захватывает 3-й элемент [index = 2, так как массивы начинаются с @ 0]. наконец, он помещает это в коллекцию $Results
. Вы можете использовать всю эту коллекцию ИЛИ отфильтровать ее с помощью $Results -match 'apple'
, чтобы получить предметы, в которых есть яблоко.
# fake reading in a text file
# in real life, use Get-Content
$InStuff = @'
[0000001] item_title apple_juice_2L_concentrate 0x000581
[0000002] item_description 98%_reconstituted_apple_juice 0x00585
[0000003] item_title orange_juice_2L_natural 0x000679
[0000004] item_description 100%_natural_apple_juice_cloudy 0x00985
[0000005] item_title apple_juice_1L_natural 0x000429
[0000006] item_description 100%_natural_apple_juice_cloudy 0x00585
'@ -split [System.Environment]::NewLine
$TargetPhrase = 'item_title'
$Results = $InStuff -match $TargetPhrase |
ForEach-Object {
$_.Split(' ')[2]
}
$Results
'=' * 20
# if you want only the apple items
$Results -match 'apple'
output ...
apple_juice_2L_concentrate
orange_juice_2L_natural
apple_juice_1L_natural
====================
apple_juice_2L_concentrate
apple_juice_1L_natural
вот альтернативный способ, который делает то же самое, но использует часть кода OP, так как он отказывается оставить это неловкое,ошибочный метод. [ ухмылка ] это предполагает, что файл был загружен с Get-Content
в переменную $InStuff
. если вы действительно хотите, чтобы все было разбито на одну строку ... вы можете сделать это довольно глупо, если хотите.
$TargetPhrase = 'item_title apple'
$InStuff |
Where-Object {
$_ -match $TargetPhrase
} |
ForEach-Object {
$_.Split(' ')[2]
}
output ...
apple_juice_2L_concentrate
apple_juice_1L_natural