Livejournal
Log in
Post
Friends
My journal
ocehb
Цепочки regexов
May 08, 2015 14:50
sub ipv6squeeze ($) { $_[0] =~ s#(^|:)0+#$1#gr =~ s#:::+#::#gr }
(
пример
)
perl
,
perl regexp
Leave a comment
Comments 2
nbuwe
May 10 2015, 20:23:40 UTC
Переводит 2a01:00d0:ffff:0000:0001:0000:0000:0002 в 2a01:d0:ffff::1::2 - хотя двух :: быть не может :)
Reply
ocehb
May 19 2015, 11:04:30 UTC
# perl -le 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($ARGV[0])' \
0001:0000:0000:0001:0000:0000:0001:0001
1::1:0:0:1:1
# perl -le 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($ARGV[0])' \
02a1:00d0:ffff:0000:0001:0000:0000:0002
2a1:d0:ffff:0:1::2
unsqeeze будет выглядеть более безобразно:
# print 0001:0000:0000:0000:0000:0000:0001:0001 | \
perl -lne 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($_)' | \
perl -lne 'my @a=split":"; print join ":", map { sprintf "%04x", hex($_) } $#a == 7 ? @a : ( map { $_ ne "" ? $_ : (0)x(8-$#a) } @a )'
0001:0000:0000:0000:0000:0000:0001:0001
Может потом причешу.
Reply
Leave a comment
Up
Comments 2
Reply
# perl -le 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($ARGV[0])' \
0001:0000:0000:0001:0000:0000:0001:0001
1::1:0:0:1:1
# perl -le 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($ARGV[0])' \
02a1:00d0:ffff:0000:0001:0000:0000:0002
2a1:d0:ffff:0:1::2
unsqeeze будет выглядеть более безобразно:
# print 0001:0000:0000:0000:0000:0000:0001:0001 | \
perl -lne 'print sub { $_[0] =~ s#0+([[:xdigit:]]+)(:|$)#$1$2#gr =~ s#(:0){2,}#:#r }->($_)' | \
perl -lne 'my @a=split":"; print join ":", map { sprintf "%04x", hex($_) } $#a == 7 ? @a : ( map { $_ ne "" ? $_ : (0)x(8-$#a) } @a )'
0001:0000:0000:0000:0000:0000:0001:0001
Может потом причешу.
Reply
Leave a comment