Hay muchas formas de hacerlo.
Aquí hay uno:
ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'
Es similar a la respuesta de Robert, excepto que solo elimina la dirección.
Podrías usar:
ip -6 addr
Te devolverá todas las direcciones IPv6 que hayas configurado.
Si está bajo Linux, también puede analizar:/proc/net/if_inet6
La primera columna es el IPv6 completo sin dos puntos. La sexta columna es el nombre de la interfaz.
Aquí hay una versión bastante larga no optimizada (solo conozco los conceptos básicos de awk) Tal vez python/perl sea una mejor opción.
for i in "$(grep enp0s25 /proc/net/if_inet6)"; do
echo "$i" | awk '{
split($1, _, "[0-9a-f]{,4}", seps)
joined = sep = ""
for (i=1; i in seps; i++) {
joined = joined sep seps[i]
sep = ":"
}
print joined
}'
done
Si tiene GNU awk (gawk), esto se puede acortar a:
for i in "$(grep enp0s25 /proc/net/if_inet6)"; do
echo "$i" | gawk '@include "join"
{
split($1, _, "[0-9a-f]{,4}", seps)
print join(seps, 1, length(seps), ":")
}'
done
Puede ponerlo en una función {ba,z,}sh para usarlo más tarde.