私はbashのスクリプトを開始していると私は上に行くために解決しなければならない小さな問題があるにIPV6に短い変換 1080::8:800:200C:417A
正規表現式またはその変換のようなものがあります1080:0:0:0:8:800:200C:417A
CentOSのは、長い形式
:
今、私のような長いのIPv6形式に短い変換したいですか?
私はCentOS上で動作するドッキング用のコンテナに取り組んでいます。
私はbashのスクリプトを開始していると私は上に行くために解決しなければならない小さな問題があるにIPV6に短い変換 1080::8:800:200C:417A
正規表現式またはその変換のようなものがあります1080:0:0:0:8:800:200C:417A
CentOSのは、長い形式
:
今、私のような長いのIPv6形式に短い変換したいですか?
私はCentOS上で動作するドッキング用のコンテナに取り組んでいます。
それは正規表現ではありませんが、それは似たような "であり、それは仕事をしません:(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'
>>>
#!/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コマンドを実行する必要があります
おっと!書かれているように、正規表現だけではマッピングを行うのに特に良い方法ではないのが良い理由になります。あなたは大規模な正規表現の右端にいくつかの興味深い(重要な)特別なケースを持っています。表示されるリテラルffffについて欺くのは実現可能です(FFFFも許可してはいけませんか?)。あなたは正規表現を固定していないので、文字列のどこにでもマッチします。そして、正規表現の代わりの操作ではなく、データを正規化するために他のもの( 'sipcalc'プログラム)を使用します。しかし、一致する正規表現を表示できるようにしています。 –
ipv6の検証のためのテストケースがたくさんあります。そのテストケースを満たすために、別のメソッドが必要です。 –
if文の先頭にreg exを固定しています.ffffを[fF] {4}に変更できます。それは...このreg-expに別の問題がたくさんある –
CentOS 8はまだアウトされていません... –
翻訳を行うための単一の表現を書くことは、おそらく実行可能ではないという疑いがあります。欠落しているグループの数を判断する必要があります。これは簡単な例ではありません。欠落しているグループ数に関する情報を使用して置換えを作成する必要があります。置き換え時に任意の(Perl)コードを実行できるPerlのようなものでは、より実現可能性があります。 –