Powershell 如何将值剪切到特定字符?

Powershell 如何将值剪切到特定字符?,powershell,powershell-2.0,Powershell,Powershell 2.0,我有一个数组$IPAddress,其中包含IPv4和IPv6地址,如下所示 IP地址:{166.33.77.15,fe90::68fe:7602:d981:2cb} IP地址:{166.33.77.18FE87::67c0:8476:3509:fb7a} IP地址:{166.33.77.65,fe80::c08e:f5ec:5095:e7ec} 我想在我的IPaddress阵列中只存储IPv4地址。我需要在“{'till',”之后剪切。如何使用powershell执行此操作?如果结果是一个对象,

我有一个数组$IPAddress,其中包含IPv4和IPv6地址,如下所示

IP地址:{166.33.77.15,fe90::68fe:7602:d981:2cb}

IP地址:{166.33.77.18FE87::67c0:8476:3509:fb7a}

IP地址:{166.33.77.65,fe80::c08e:f5ec:5095:e7ec}


我想在我的IPaddress阵列中只存储IPv4地址。我需要在“{'till',”之后剪切。如何使用powershell执行此操作?

如果结果是一个对象,则您只需执行以下操作:

$IPAddress[0]
如果是字符串,请尝试使用正则表达式:

'IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}' -replace '^IPAddress : {([^,]+).+$','$1'
这是一种方法,但我认为(不是……我肯定!)使用正则表达式有更好的方法

$IPAddress = $IPAddress | % { $_.Substring( $_.IndexOf('{')+1 , $_.IndexOf(',') - ($_.IndexOf('{')+1))
编辑:使用regex的简单方法(不验证IP地址是否为有效的IP地址)


为此,您可以非常轻松地在PowerShell中使用正则表达式

$IPAddress = @(`
    "IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}", `
    "IPAddress : {166.33.77.18, fe87::67c0:8476:3509:fb7a}", `
    "IPAddress : {166.33.77.65, fe80::c08e:f5ec:5095:e7ec}")

foreach($ip in $IPAddress) { 
    if ($ip -match "{.*,") {
        Write-Host $matches[0].substring(1, $matches[0].length - 2)
    }
}

$matches
是一个特殊变量,在使用
-match
运算符后设置。

我得到的答案与Shay的答案几乎相同,但我要补充的是,您不需要进行每次替换。它将一次完成整个数组:

$array -replace '^IPAddress : {([^,]+).+$','$1'

你试过什么吗?你知道怎么做吗?@stej:可能会使用.net中的一些子字符串方法。我没有在PowerShell中使用它。这看起来像是对象的
格式列表
的输出,这些对象有一个属性
IPAddress
,这是一个地址数组。在这种情况下,你会疯狂地抛出字符串操作或regex。毕竟你有PowerShell;-)@Joey:是的,它似乎是某种对象。VMware PowerCLI返回了该IP地址。我正在应用这些字符串函数,结果变得疯狂:)是的,我在思考对象;)最后我发现它是某种对象。我无法在它们上应用字符串函数。谢谢你的提示。
$array -replace '^IPAddress : {([^,]+).+$','$1'