IPV6地址缩短了shell和powershell

时间:2014-12-06 23:33:18

标签: shell powershell

我必须在shell和PowerShell中创建一个尽可能缩短ipv6地址的脚本。

像:

Input: 2001:0db8:03cd:0000:0000:ef45:0006:0123
Output: 2001:db8:3cd:::ef45:6:123

如果使用-help参数,脚本应该给出自己的描述,但我不知道如何在PowerShell中这样做。

这是我在PowerShell中的代码,它正确地缩短了地址:

    param([parameter(Mandatory=$true)]$file)

if (test-path $file){
    foreach ($ip in Get-Content $file){
        $ip=$ip.Replace("0000","")
        Write-Host $ip

}
}

我不知道如何在shell中进行缩短,我试过这样但是没有工作:

#!/bin/sh

if [ $1 = "-help" ]
then
echo description

else file = $1
fi

for ip in `cat ipv6.txt`
do
    $ip=$line
    $replace=""
    $echo ${var//0000/$replace}
done

这是包含地址的txt文件: http://uptobox.com/6woujdvdfkmh

3 个答案:

答案 0 :(得分:2)

PowerShell的优点在于您可以访问丰富的库,该库具有为您执行此操作的方法。试试这个:

<#
.SYNOPSIS
    Converts long form IP address into its short form
.DESCRIPTION
    Converts long form IP address into its short form
.PARAMETER IPAddress
    The IP address to convert.
.EXAMPLE
    PS C:\> ConvertTo-IPAddressCompressedForm 2001:0db8:03cd:0000:0000:ef45:0006:0123
#>
function ConvertTo-IPAddressCompressedForm($IPAddress) {
     [System.Net.IPAddress]::Parse($IPAddress).IPAddressToString
}

C:\> ConvertTo-IPAddressCompressedForm 2001:0db8:03cd:0000:0000:ef45:0006:0123
2001:db8:3cd::ef45:6:123

请注意,要根据文档注释在PowerShell中使用:

ConvertTo-IPAddressCompressedForm -?

答案 1 :(得分:1)

我们可能会去同一所学校。这就是我被告知要做的事情,它完美无缺:

cat filename | sed -e 's/:0*/:/g' filename

答案 2 :(得分:1)

$longIPAddress = '2001:0db8:03cd:0000:0000:ef45:0006:0123'
$shortIPAddress = ([IPAddress]$longIPAddress).IPAddressToString
$shortIPAddress
2001:db8:3cd::ef45:6:123