Предположим, что var содержит ip:ip=192.168.2.1
. Если значение необходимо присвоить новой переменной, просто заключите любое решение в $()
и назначьте его переменной rr=$(...)
.
Возможны некоторые решения:
Простейший: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Большинство снарядов: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Некоторые снаряды: IFS=. read d c b a <<<"$ip"; printf %s "$a.$b.$c.$d.in-addr.arpa."
авк: echo "$ip" | awk -F. '{OFS=FS;print $4,$3,$2,$1,"in-addr.arpa"}'
сед: echo "$ip" | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$/\4.\3.\2.\1.in-addr.arpa./'
сед: echo "arpa.in-addr.$ip" | sed 'y/./\n/' | sed 'G;$s/\n/./gp;h;d'
перл: echo "$ip" | perl -F\\. -lane '$,=".";print( join(".",(reverse @F),"in-addr.arpa"))'
копать: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
хост: host -t ptr 192.168.2.1 | cut -d' ' -f2
Оба решения — dig и host — работают с IPv6.