我有一个数组$ IPAddress,其中包含IPv4和IPv6地址,如下所示。
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}
我想在我的IPaddress数组中只存储IPv4地址。我需要在'{'直到','后切。如何使用PowerShell做到这一点?
答案 0 :(得分:2)
如果结果是一个对象,那么你可以简单地执行:
$IPAddress[0]
如果是字符串,请尝试使用正则表达式:
'IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}' -replace '^IPAddress : {([^,]+).+$','$1'
答案 1 :(得分:0)
这是一种方式,但我认为(不是......我确定!)使用正则表达式有更好的方法!
$IPAddress = $IPAddress | % { $_.Substring( $_.IndexOf('{')+1 , $_.IndexOf(',') - ($_.IndexOf('{')+1))
编辑:使用正则表达式的简单方法(不验证IP地址是否是有效的ipaddress)
$IPAddress = $IPAddress | select-string "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | select -ExpandProperty matches | select -ExpandProperty value
答案 2 :(得分:0)
您可以非常轻松地在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
运算符后设置。
答案 3 :(得分:0)
我得到了与Shay相同的答案,但我要补充一点,你不需要预先取代。它会立刻完成整个阵列:
$array -replace '^IPAddress : {([^,]+).+$','$1'