фильтровать выходы, используя каналы select-string

3334
JL Peyret

В bash, если я сделаю следующее, я получу все переменные окружения с wdними.

env | grep "wd" 

Теперь, в Powershell, я знаю, что мог сделать

get-childitem env:wd* 

Но я хочу направить канал к select-string как более общий подход, чтобы отфильтровать то, что поступает из его канала, независимо от того, что находится слева от канала. Так же, как grep.

Это ничего не фильтрует, я получаю все переменные окружения.

get-childitem env: | out-string | select-string -Pattern wd 

И это мне ничего не дает

get-childitem env: | select-string -Pattern "wd" 

Я знаю, что мог бы использовать следующее, и на самом деле было бы лучше, если бы я фильтровал только по имени переменной среды. Но что, если я хочу быстрый и грязный фильтр а-ля grep? И особенно, не зная об атрибутах того, что приходит из трубы.

get-childitem env: | where-object {$_.Name -like "wd*"} 

то есть есть ли Powershelll, эквивалентный grep, применимый в контексте конвейера, а не только в контексте поиска файлов, который, select-stringкажется, хорошо покрывает.

6
`Out-String -Stream` PetSerAl 7 лет назад 0
`get-childitem env: | Out-String -Stream | select-string -Pattern wd` был просто билетом. ** Thx! ** Я не знаю, если вы заботитесь, но я обязательно приму это, если вы опубликуете это как ответ. JL Peyret 7 лет назад 0

1 ответ на вопрос

6
PetSerAl

По умолчанию Out-Stringсоздается однострочный объект, который содержит все выходные данные, поэтому следующий фильтр выберет или отбросит все выходные данные целиком. Вам необходимо использовать -Streamпараметр Out-Stringкомандлета для создания отдельного строкового объекта для каждой строки вывода.