用前导 0 填充 IP 地址 - powershell
Pad IP addresses with leading 0's - powershell
我希望用 0 填充 IP 地址
例子
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053
试过这个:
[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')
也尝试过拆分,但我是 powershell 的新手...
您可以组合使用 .Split()
和 -join
。
('1.2.3.4'.Split('.') |
ForEach-Object {$_.PadLeft(3,'0')}) -join '.'
通过这种方法,您一直在处理字符串。 Split('.')
在每个 .
字符处创建一个数组元素。 .PadLeft(3,'0')
确保 3 个字符在必要时带有前导零。 -join '.'
将数组组合成一个字符串,每个元素由 .
.
分隔
您可以对格式运算符 -f
采取类似的方法。
"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f ('1.2.3.4'.Split('.') |
Foreach-Object { [int]$_ } )
:dN
格式字符串启用 N
(位数)前导零填充。
此方法与第一个解决方案中一样创建一个字符串数组。然后每个元素都被流水线化并转换为 [int]
。最后,格式应用于每个元素。
补充 with a more concise alternative using the -replace
operator with a script block ({ ... }
),这需要PowerShell Core (v6.1+):
PSCore> '1.2.3.50' -replace '\d+', { '{0:D3}' -f [int] $_.Value }
001.002.003.050
每次匹配正则表达式 \d+
(一个或多个数字)都会调用脚本块,脚本块中的 $_
指的是表示匹配的 System.Text.RegularExpressions.Match
实例在眼前;它的 .Value
属性 包含匹配的文本(字符串)。
我希望用 0 填充 IP 地址
例子
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053
试过这个:
[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')
也尝试过拆分,但我是 powershell 的新手...
您可以组合使用 .Split()
和 -join
。
('1.2.3.4'.Split('.') |
ForEach-Object {$_.PadLeft(3,'0')}) -join '.'
通过这种方法,您一直在处理字符串。 Split('.')
在每个 .
字符处创建一个数组元素。 .PadLeft(3,'0')
确保 3 个字符在必要时带有前导零。 -join '.'
将数组组合成一个字符串,每个元素由 .
.
您可以对格式运算符 -f
采取类似的方法。
"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f ('1.2.3.4'.Split('.') |
Foreach-Object { [int]$_ } )
:dN
格式字符串启用 N
(位数)前导零填充。
此方法与第一个解决方案中一样创建一个字符串数组。然后每个元素都被流水线化并转换为 [int]
。最后,格式应用于每个元素。
补充-replace
operator with a script block ({ ... }
),这需要PowerShell Core (v6.1+):
PSCore> '1.2.3.50' -replace '\d+', { '{0:D3}' -f [int] $_.Value }
001.002.003.050
每次匹配正则表达式 \d+
(一个或多个数字)都会调用脚本块,脚本块中的 $_
指的是表示匹配的 System.Text.RegularExpressions.Match
实例在眼前;它的 .Value
属性 包含匹配的文本(字符串)。