我如何只得到字符串的一部分
How do I get only part on the string out
我们想在 Oracle VirtualBox 中暂停正在内部网络上使用的 VM,当我们列出 VM 时,我得到以下输出,但要暂停 VM,我只需要将 VM 名称显示为 people将创建自己的虚拟机,因此无法具体命名。问题只是我的 powershell 技能不是很好,当我尝试使用拆分或替换时,我 运行 出现了关于 space ot 曲线括号的错误,我想结束的是只是 VM 名称 WIN10_VM1 但如何获取?
"WIN10_VM1" {bd9e16dc-1a1a-4340-aed2-af3b72f25c4f}
"win2019" {20fb95cb-2fb3-48f8-a69d-a1e00ca014b5}
PowerShell 公开了整个 .NET 环境。所以你可以使用Sytem.String.Substring()方法。
& "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" | ForEach-Object { $_.Substring(0, $_.IndexOf("{")).Replace(" ", "") }
感谢 Pim 为我指明了正确的方向。现在我使用以下命令只得到了 VM 名称的输出,所以现在我可以处理脚本的下一步了:)
$vms = & "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms| ForEach-Object { $_.Substring(0, $_.IndexOf("{")) }
$test = $vms -replace '[\W]', ''
$test
输出:
WIN10_VM1
win2019
要实现正则表达式解决方案,您可以使用 -replace
或 Select-String
。
使用Select-String
:
($vms | Select-String -Pattern '(?<=^")[^"]+').Matches.Value
将 -replace
与捕获组一起使用:
$vms -replace '^"([^"]+)".*',''
正则表达式解释:
(?<=^")
:积极的回顾断言 (?<=)
即一行中的第一个字符是 "
.
[^"]+
:匹配一个或多个(+
)个非"
. 的字符
.*
:匹配除换行符外的所有字符。
括号用法 ([^"]+)
将 [^"]+
匹配标识为捕获组。由于未命名,它成为捕获组 1。当使用 -replace
运算符设置替换字符串时,您可以访问捕获组。 </code> 表示捕获组 1,必须用单引号括起来,如果在双引号之间则必须转义反引号。这是为了避免 PowerShell 在 <code>
.
上执行插值
我们想在 Oracle VirtualBox 中暂停正在内部网络上使用的 VM,当我们列出 VM 时,我得到以下输出,但要暂停 VM,我只需要将 VM 名称显示为 people将创建自己的虚拟机,因此无法具体命名。问题只是我的 powershell 技能不是很好,当我尝试使用拆分或替换时,我 运行 出现了关于 space ot 曲线括号的错误,我想结束的是只是 VM 名称 WIN10_VM1 但如何获取?
"WIN10_VM1" {bd9e16dc-1a1a-4340-aed2-af3b72f25c4f} "win2019" {20fb95cb-2fb3-48f8-a69d-a1e00ca014b5}
PowerShell 公开了整个 .NET 环境。所以你可以使用Sytem.String.Substring()方法。
& "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" | ForEach-Object { $_.Substring(0, $_.IndexOf("{")).Replace(" ", "") }
感谢 Pim 为我指明了正确的方向。现在我使用以下命令只得到了 VM 名称的输出,所以现在我可以处理脚本的下一步了:)
$vms = & "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms| ForEach-Object { $_.Substring(0, $_.IndexOf("{")) }
$test = $vms -replace '[\W]', ''
$test
输出:
WIN10_VM1
win2019
要实现正则表达式解决方案,您可以使用 -replace
或 Select-String
。
使用Select-String
:
($vms | Select-String -Pattern '(?<=^")[^"]+').Matches.Value
将 -replace
与捕获组一起使用:
$vms -replace '^"([^"]+)".*',''
正则表达式解释:
(?<=^")
:积极的回顾断言(?<=)
即一行中的第一个字符是"
.[^"]+
:匹配一个或多个(+
)个非"
. 的字符
.*
:匹配除换行符外的所有字符。
括号用法 ([^"]+)
将 [^"]+
匹配标识为捕获组。由于未命名,它成为捕获组 1。当使用 -replace
运算符设置替换字符串时,您可以访问捕获组。 </code> 表示捕获组 1,必须用单引号括起来,如果在双引号之间则必须转义反引号。这是为了避免 PowerShell 在 <code>
.