微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Powershell 匹配和打印输出中的特定列

如何解决使用 Powershell 匹配和打印输出中的特定列

我想从命令的输出获取特定的列。有人可以建议最好的方法是什么吗?

所使用的命令是 - choco list -lo,它给出的输出

Chocolatey v0.10.15
chocolatey 0.10.15
erlang 22.3
rabbitmq 3.8.11
3 packages installed.

从给定的输出中,唯一需要的值是 3.8.11,它是 rabbitmq 的版本。

我已经试过了,但它不起作用 - choco list -lo | Select-String -Pattern "rabbit" | %{ $_.Split(' ')[1]; }

有人可以建议我们如何做到这一点吗?

提前致谢:)

解决方法

试试这个:

choco list -lo | 
    Select-String -Pattern "rabbitmq (.+)" | 
    ForEach-Object { $_.Matches.Groups[1].Value }

Select-String 的输出是一个 MatchInfo 对象,所以需要查询其成员才能得到匹配的值。

我正在使用组 (.+) 来提取版本号,而无需进一步的字符串操作。然后通过 ForEach-Object$_.Matches.Groups[1].Value 1 脚本块中读取组值。在此表达式中,索引 1 指定第一组(索引 0 将指定整个匹配项)。


[1] ForEach-Object 缩写为 %

,

没有逗号可以根据您发布的内容进行拆分。这是一个空间...

我没有安装 choco,因为我没有它的用​​例。所以,一个伪列表是:

选项 1:

Clear-Host
$ChocoList = @'
Chocolatey v0.10.15
chocolatey 0.10.15
erlang 22.3
rabbitmq 3.8.11
'@ -Split "`n"

$ChocoList | 
ForEach {
    (
        $PSItem | 
        Select-String -Pattern 'rabbitmq'
    ) -Split (' ')
}
# Results
<#
rabbitmq
3.8.11
#>

选项 2

([regex]::Matches($ChocoList,'rabbitmq.*').Value -split ' ')
# Results
<#
rabbitmq
3.8.11
#>

根据我对您的评论进行更新 - 选项 1:

Clear-Host
$ChocoList = @'
Chocolatey v0.10.15
chocolatey 0.10.15
erlang 22.3
rabbitmq 3.8.11
'@ -Split "`n"

($ChocoList | 
ForEach {
    (
        $PSItem | 
        Select-String -Pattern 'rabbitmq'
    ) -Split (' ')
})[1]
# Results
<#
3.8.11
#>

根据我的评论更新回你的 - 选项 2

([regex]::Matches($ChocoList,'rabbitmq.*').Value -split ' ')[1]
# Results
<#
3.8.11
#>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。