質問: linux / bash:インターフェースのipv6アドレスを取得する方法は? スクリプトでインターフェイスのipv6アドレスを取得するために使用できるコマンドは何ですか?更新:回答の1つからのsedの出力。$ ip -6 addr 1: lo: <loopback,up,lower_up> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: wlan0: <broadcast,multicast,up,lower_up> mtu 1500 qlen 1000 inet6 fe80::224:d7ff:fed0:4f5c/64 scope link valid_lft forever preferred_lft forever その他:$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d' $ ip addr show dev eth0 2: eth0: <no-carrier,broadcast,multicast,up> mtu 1500 qdisc pfifo_fast state down qlen 1000 link/ether f0:de:f1:7b:e9:6c brd ff:ff:ff:ff:ff:ff
回答: linuxを使用している場合は、次を解析することもできます。/proc/net/if_inet6最初の列は、コロンのない完全なipv6です。 6番目の列はインターフェイス名です。ここでは、かなり長い、最適化されていないバージョン(私は今だけawkの基本です)おそらくpython/perlがより良い選択です。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 gnu awk(gawk)がある場合、これは次のように短縮できます。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 後で使用するために、{ba、z、} sh関数に入れることができます。