使用选择字符串管道过滤输出

使用选择字符串管道过滤输出

wd在 bash 中,如果我执行以下操作,我将获得其中的所有环境变量。

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*"}

即是否有相当于grep可用于管道上下文,而不仅仅是文件搜索select-string似乎覆盖得很好。

答案1

默认情况下,Out-String生成单个字符串对象,其中包含所有输出,因此以下过滤器将选择或丢弃所有输出。您需要使用cmdlet-Stream的参数Out-String为每行输出生成单独的字符串对象。

答案2

答案相同,作为函数和别名,可以将其包含在 powershell 配置文件中:

function Find-Env-Variable (
           [Parameter(Mandatory = $true, Position=0)]
           [String]$Pattern){
    get-childitem ENV: | Out-String -Stream | select-string -Pattern "$Pattern"
}
Set-Alias findenv Find-Env-Variable

相关内容