Я ищу 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...
Я ищу 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]
. Наконец, форматирование применяется к каждому элементу.
Чтобы дополнить полезный ответ AdminOfThings более краткой альтернативой, используйте файл -replace
оператор с блоком скрипта ({ ... }
), для которого требуется 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
содержит соответствующий текст (строку).
System.Text.RegularExpressions.Match
, на который ссылается $_
.
- person mklement0; 24.09.2019