2016-04-19 7 views
0

私はbashのスクリプトを開始していると私は上に行くために解決しなければならない小さな問題があるにIPV6に短い変換 1080::8:800:200C:417A正規表現式またはその変換のようなものがあります1080:0:0:0:8:800:200C:417ACentOSのは、長い形式

今、私のような長いのIPv6形式に短い変換したいですか?

私はCentOS上で動作するドッキング用のコンテナに取り組んでいます。

+0

CentOS 8はまだアウトされていません... –

+2

翻訳を行うための単一の表現を書くことは、おそらく実行可能ではないという疑いがあります。欠落しているグループの数を判断する必要があります。これは簡単な例ではありません。欠落しているグループ数に関する情報を使用して置換えを作成する必要があります。置き換え時に任意の(Perl)コードを実行できるPerlのようなものでは、より実現可能性があります。 –

答えて

3

それは正規表現ではありませんが、それは似たような "であり、それは仕事をしません:(python3.5.1でテスト済み)

>>> import ipaddress 
>>> x = '1080::8:800:200C:417A' 
>>> y = ipaddress.ip_address(x) 
>>> y.exploded 
'1080:0000:0000:0000:0008:0800:200c:417a' 
>>> 

参考: https://docs.python.org/3/library/ipaddress.html

1
#!/bin/bash 
echo "enter the ip address:" 
read s 
if [[ $s =~ ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$ ]]; then 

     echo -e '\E[47;31m'"\033[1mIPv6 Format\033[0m" 
     echo -n "The IPv6 Address Expanded Form:" 
     EXPANDED=`sipcalc $s | fgrep Expand | cut -d '-' -f 2` 
     echo -e "\033[32m $EXPANDED\033[0m" 
     echo -n "IPv6 address Compress Form:" 
     Compress=`sipcalc $s | fgrep Comp | cut -d '-' -f 2` 
     echo -e "\033[32m$Compress\033[0m" 
     echo -n "Address Type of IPv6:" 
     type=`sipcalc $s | fgrep type | cut -d '-' -f 2,3,4` 
     comment=`sipcalc $s | fgrep Comment | cut -d '-' -f 2` 
     echo -e "\033[32m $type$comment\033[0m" 
else 
     echo -e '\E[37;44m'"\033[1mNOT VALID IPv6 address\033[0m" 
fi 

このipv6 validationのための私のコードです.Uは "sipcalc"を使ってipの拡張形式を取得しますが、grepとcutコマンドを実行する必要があります

+0

おっと!書かれているように、正規表現だけではマッピングを行うのに特に良い方法ではないのが良い理由になります。あなたは大規模な正規表現の右端にいくつかの興味深い(重要な)特別なケースを持っています。表示されるリテラルffffについて欺くのは実現可能です(FFFFも許可してはいけませんか?)。あなたは正規表現を固定していないので、文字列のどこにでもマッチします。そして、正規表現の代わりの操作ではなく、データを正規化するために他のもの( 'sipcalc'プログラム)を使用します。しかし、一致する正規表現を表示できるようにしています。 –

+0

ipv6の検証のためのテストケースがたくさんあります。そのテストケースを満たすために、別のメソッドが必要です。 –

+0

if文の先頭にreg exを固定しています.ffffを[fF] {4}に変更できます。それは...このreg-expに別の問題がたくさんある –

関連する問題