如何解决使用 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 举报,一经查实,本站将立刻删除。