我有很多使用的IPv6地址,但今天可以说是2001:abc::1
我已经可以使用BASH将其扩展为:2001:0abc:0000:0000:0000:0000:0000:0001
我需要使用扩展了的 IPv6,并将其反转为我的PTR的一个半字节(加上arpa字符串),所以它看起来像这样:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.b.a.0.1.0.0.2.ip6.arpa
我将允许awk
或其他低级答案使社区受益,BASH和功能还可以,但是单行sed
会震撼我的世界。
注意:有人在讨论这是一个“实际问题”。我的脚本仅使用sed
,在任何地方都不使用awk
,并且比/sh
更倾向于/bash
。我认为维护脚本实际上是“依赖性”的一部分所需的技能,因此我避免使用awk
。但是,为了对社区有用,此处应该欢迎awk
的答案。不使用awk
的BASH函数也将受到欢迎。
答案 0 :(得分:3)
GNU sed单一代码,可能主要是为了证明您不应该为此使用sed:
sed 's/://g;s/^.*$/\n&\n/;tx;:x;s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/;tx;s/\n//g;s/\(.\)/\1./g;s/$/ip6.arpa/'
分手并发表评论:
# Remove all the colons
s/://g
# Embed line between two newlines
s/^.*$/\n&\n/
# Reset flag tested by t
tx
# Label to jump to
:x
# Swap two characters
s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/
# Jump to label if substitution did something
tx
# Remove newlines
s/\n//g
# Insert period after each character
s/\(.\)/\1./g
# Append rest of desired string
s/$/ip6.arpa/
行反转技术取自GNU sed manual。
唯一需要GNU sed的地方是仅使用\n
插入换行符。如果您使用文字换行符代替s/^.*$/\n&\n/
,则使用
s/^.*$/\
&\
/
该脚本应与任何sed一起运行。
答案 1 :(得分:2)
names
...作为输出发出:
list
答案 2 :(得分:2)
在任何UNIX系统上的任何shell中使用任何awk:
$ awk '{
gsub(/:/,"")
for (i=length($0); i>0; i--) {
printf "%s.", substr($0,i,1)
}
print "ip6.arpa"
}' file
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.b.a.0.1.0.0.2.ip6.arpa