IP-адреса площадок с ведущими 0 - powershell - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь заполнить 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 ...

Ответы [ 2 ]

1 голос
/ 24 сентября 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 содержит соответствующий текст (строку).

1 голос
/ 24 сентября 2019

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

...