2012-03-15 8 views
0

私は以下のようにIPv4とIPv6アドレスを含む配列$ IPAddressを持っています。どのように特定の文字までの値をカットするには?

たIPAddress:{166.33.77.15、fe90 :: 68fe:7602:d981:2CB}

たIPAddress:{166.33.77.18、fe87 :: 67c0:3509:8476 fb7a}

IPアドレス:{166.33.77.65、fe80 :: c08e:f5ec:5095:e7ec}

私は自分のIPアドレス配列にIPv4アドレスだけを格納したいと思います。私は '{' till '、' 'の後に切る必要があります。どのようにpowershellを使ってこれを行うには?

+2

何か試しましたか?それをどうやって行うのか考えていますか? – stej

+0

@stej:.netの中のいくつかの部分文字列メソッドが使われるかもしれません。私はpowershellでそれを使用していません – Samselvaprabu

+2

これはアドレスの配列であるプロパティ 'IPAddress'を持つオブジェクトの' Format-List'の出力のようです。その場合は、文字列の操作や正規表現を投げることができます。結局のところ、* PowerShell *を持っています;-) – Joey

答えて

2

結果がオブジェクトであるなら、あなたは簡単に行うことができます。

$IPAddress[0] 

それが文字列なら、正規表現を使用してみてください:

'IPAddress : {166.33.77.15, fe90::68fe:7602:d981:2cb}' -replace '^IPAddress : {([^,]+).+$','$1' 
+0

はい、私はオブジェクトを考えていた;) –

+0

最後に私はそれがオブジェクトのいくつかの種類であることがわかった。私はそれらに文字列関数を適用することができませんでした。ヒントをありがとう。 – Samselvaprabu

0

これは方法ですが、私は(ないと思います。 ..私は確信している!)正規表現を使用してより良い何かがある!

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

編集:正規表現で簡単な方法は、

$IPAddress = $IPAddress | select-string "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | select -ExpandProperty matches | select -ExpandProperty value 
0

あなたは、このために非常に簡単にPowerShellで正規表現を使用することができます(IPアドレスが有効なIPアドレスがあるかどうかの検査ではありません)。

$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

私はShayとほぼ同じ答えを得ましたが、置き換えをforeachする必要はないと付け加えます。アレイ全体を一度に実行します:

$array -replace '^IPAddress : {([^,]+).+$','$1' 
関連する問題