Дополнить IP-адреса ведущими нулями — 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...


person curiousPerson    schedule 24.09.2019    source источник


Ответы (2)


Вы можете использовать комбинацию .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]. Наконец, форматирование применяется к каждому элементу.

person AdminOfThings    schedule 24.09.2019

Чтобы дополнить полезный ответ 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 содержит соответствующий текст (строку).

person mklement0    schedule 24.09.2019
comment
Это хороший материал. Мне нужно помнить о заменах Scriptblock для версий Core. - person AdminOfThings; 24.09.2019
comment
@AdminOfThings: Да, это удобная функция, хотя все еще несколько сложная, потому что вам нужно понять структуру экземпляра System.Text.RegularExpressions.Match, на который ссылается $_. - person mklement0; 24.09.2019