在 powershell 中使用匹配模式替换数据

Using Match pattern in powershell to replace data

$Gateway = "192.168.122.1"
$Ip = "172.18.66.34"

我的目标是获得如下输出。

172.18.66.1

$IP 的第 3 个八位字节和 $Gateway 的第 4 个八位字节....两者的组合...

我在下面尝试过,但没有任何其他逻辑可以实现此目的

$Gateway -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.(?<content>)"
$fourth = $matches['content']
$mgmt = "172.18.47.19"
$mgmt -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.(?<content>.*)"
$new = $matches['content']
$mgmt.replace($new,$fourth)

您忘记在 "content"-caturing 组中填写模式。

试试这个:

$Gateway -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.(?<content>\d{1,3})"

可能是原始的,但可以做到

($Ip -split "\.")[0],($Ip -split "\.")[1],($Ip -split "\.")[2],($Gateway -split "\.")[-1] -join "."

172.18.66.1

适用于 Powershell 2

你是这个意思吗?

我知道这不是正则表达式,但这是向您介绍类型 [ipaddress]

的超级理由
$Gateway = "192.168.122.1"
$Ip = "172.18.66.34"

(([ipaddress]$Ip).GetAddressBytes()[0..2] + ([ipaddress]$Gateway).GetAddressBytes()[-1]) -join "."

我们使用方法 .GetAddressBytes() 来分解八位字节,然后仅使用数组符号、连接和简单的 -join 将地址改造成您的标准。