String 我只想使用powershell替换字符串的某些字符
我正在编写一个powershell脚本,它使用ip地址生成网络地址(String 我只想使用powershell替换字符串的某些字符,string,powershell,networking,replace,scripting,String,Powershell,Networking,Replace,Scripting,我正在编写一个powershell脚本,它使用ip地址生成网络地址(10.12.142.12to10.12.142.0),我将处理的所有ip地址都遵循以下格式10.xxx.xxx.12 我试过用这个。它一直工作,直到ip地址如下所示10.12.154.12或10.214.126.12。它捕获并替换所有.12。我也试过一些正则表达式,但找不出一个只匹配最后八位字节的表达式 $ipAddress = "10.12.23.12" $networkNumber = $ipAddress.replace(
10.12.142.12
to10.12.142.0
),我将处理的所有ip地址都遵循以下格式10.xxx.xxx.12
我试过用这个。它一直工作,直到ip地址如下所示10.12.154.12
或10.214.126.12
。它捕获并替换所有.12
。我也试过一些正则表达式,但找不出一个只匹配最后八位字节的表达式
$ipAddress = "10.12.23.12"
$networkNumber = $ipAddress.replace(".12",".0")
我想要
10.12.23.0
,但是我得到10.0.23.0
或者用String.remove()
和String.LastIndexOf()
,然后添加.0
:
$ipAddress = "10.12.23.12"
$network = $ipAddress.Remove($ipAddress.LastIndexOf('.')) + '.0'
或者使用仅替换字符串末尾的.12
的正则表达式:
$ipAddress = "10.12.23.12"
$network = $ipAddress -replace '\.\d{1,3}$','.0'
这两种方法都适用于最后一个八位字节中的任何值,而不仅仅是
.12
您可以对字符串使用拆分
和联接
方法:
$ipAddress = "10.12.23.12"
$parts = $ipAddress.Split(".")
$parts[3] = "0"
$networkNumber = [String]::Join(".", $parts)
另一个选项是使用
substring()
和LastIndexOf()
提取最后一个
之前的子字符串,然后使用0
连接:
PS C:\> $ipAddress = "10.12.23.12"
PS C:\> $ipAddress.Substring(0, $ipAddress.LastIndexOf('.') + 1) + '0'
10.12.23.0
这可能有些过分,但由于网络地址与子网掩码直接相关,因此此函数将考虑这一点
Function Get-NetAddress {
param($IPAddress,$SubnetMask)
$IPArray = $IPAddress -split "\."
$MaskArray = $SubnetMask -split "\."
$output = for ($i = 0; $i -lt 4; $i++) {
$IPArray[$i] -band $MaskArray[$i]
}
$output -join "."
}
输出样本:
Get-NetAddress 192.168.7.1 255.255.248.0
192.168.0.0
Get-NetAddress 10.20.30.40 255.255.0.0
10.20.0.0
Get-NetAddress 10.20.30.250 255.255.255.0
10.20.30.0
Get-NetAddress 10.20.30.171 255.255.255.224
10.20.30.160