使用 Powershell 匹配并打印输出中的特定列
Use Powershell to match and print specific column from output
我想从命令的输出中获取特定的列。有人可以建议最好的方法是什么吗?
使用的命令是 - 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
对象,所以你需要查询它的成员来得到匹配的值。
我正在使用组 (.+)
来启用版本号提取,而无需进一步的字符串操作。然后通过 $_.Matches.Groups[1].Value
在 ForEach-Object
1 脚本块中读取组值。在此表达式中,索引 1 指定第一组(索引 0 将指定整个匹配项)。
[1] ForEach-Object
缩写为 %
没有逗号可以根据您发布的内容进行拆分。这是一个 space...
我没有安装 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
#>
我想从命令的输出中获取特定的列。有人可以建议最好的方法是什么吗?
使用的命令是 - 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
对象,所以你需要查询它的成员来得到匹配的值。
我正在使用组 (.+)
来启用版本号提取,而无需进一步的字符串操作。然后通过 $_.Matches.Groups[1].Value
在 ForEach-Object
1 脚本块中读取组值。在此表达式中,索引 1 指定第一组(索引 0 将指定整个匹配项)。
[1] ForEach-Object
缩写为 %
没有逗号可以根据您发布的内容进行拆分。这是一个 space...
我没有安装 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
#>