Как сократить значения до определенного символа? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть массив $ IPAddress, который содержит адреса IPv4 и IPv6, как показано ниже.

IP-адрес: {166.33.77.15, fe90 :: 68fe: 7602: d981: 2cb}

IP-адрес: {166.33.77.18, fe87 :: 67c0: 8476: 3509: fb7a}

IP-адрес: {166.33.77.65, fe80 :: c08e: f5ec: 5095: e7ec}

Я хотел бы хранить в своем массиве IPaddress только адрес IPv4.Мне нужно сократить после '{' до ','.Как это сделать с помощью powershell?

Ответы [ 4 ]

2 голосов
/ 15 марта 2012

Если результатом является объект, то вы можете просто сделать:

$IPAddress[0]

Если это строка, попробуйте использовать регулярное выражение:

'IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}' -replace '^IPAddress : {([^,]+).+$','$1'
0 голосов
/ 15 марта 2012

Я получил почти такой же ответ, как и Шей, но добавлю, что вам не нужно искать замену. Это сделает весь массив сразу:

$array -replace '^IPAddress : {([^,]+).+$','$1'
0 голосов
/ 15 марта 2012

Для этого вы можете очень легко использовать регулярные выражения в PowerShell.

$IPAddress = @(`
    "IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}", `
    "IPAddress : {166.33.77.18, fe87::67c0:8476:3509:fb7a}", `
    "IPAddress : {166.33.77.65, fe80::c08e:f5ec:5095:e7ec}")

foreach($ip in $IPAddress) { 
    if ($ip -match "{.*,") {
        Write-Host $matches[0].substring(1, $matches[0].length - 2)
    }
}

$matches - это специальная переменная, которая устанавливается после использования оператора -match.

0 голосов
/ 15 марта 2012

Это способ, но я думаю (не ... я уверен!) Что-то лучше с помощью регулярных выражений!

$IPAddress = $IPAddress | % { $_.Substring( $_.IndexOf('{')+1 , $_.IndexOf(',') - ($_.IndexOf('{')+1))

Редактировать: простой способ с регулярным выражением (без проверки, если IP-адрес являетсядействительный ipaddress)

$IPAddress = $IPAddress |  select-string "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | select -ExpandProperty matches | select -ExpandProperty value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...