我想获取网络接口设备名称(ens ###)及其关联的IP地址(###。###。###。###)。我有解决方案来获取一个或另一个,但是我找不到能够将每对(名称+ IP)输出到一行的东西。
这是获取IP的命令
ip address | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
在这里我可以获取设备名称
ip address | grep -v lo | cut -d ' ' -f2 | tr ':' '\n' | awk NF
但是我想要一种将两者都输出到自己行的方法,就像这样
ens32 10.0.0.100
ens33 10.1.0.100
编辑:
这是IP地址的示例输出
[root@centos ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/23 brd 10.0.1.255 scope global dynamic ens32
valid_lft 83040sec preferred_lft 83040sec
inet6 0000::000:0000:0000:0000/64 scope link
valid_lft forever preferred_lft forever
3: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 10.1.0.100/24 brd 10.0.2.255 scope global dynamic ens33
valid_lft 1277sec preferred_lft 1277sec
inet6 0000::000:0000:0000:0000/64 scope link
valid_lft forever preferred_lft forever
解决方案:
这两个都会给我相同的期望输出。感谢您的帮助!
ip -o addr show scope global | awk '/^[0-9]:/{print $2, $4}' | cut -f1 -d '/'
ip -o addr show scope global | tr -s ' ' | tr '/' ' ' | cut -f 2,4 -d ' '
答案 0 :(得分:3)
awk
一如既往地像护身符。
ip address |
awk '
/^[0-9]:/{
name=substr($2, 1, length($2) - 1)
}
/^[ ]*inet /{
split($2, a, "/")
if (name != "lo")
print name,a[1]
}
'
将输出:
ens32 10.0.0.100
ens33 10.1.0.100
:
。lo
,则我们不会打印输出,因此会过滤回送接口。答案 1 :(得分:2)
如果您需要单线,请尝试以下操作(感谢Dougie提供了更完善的ip
命令):
ip -oneline -4 addr show scope global | tr -s ' ' | tr '/' ' ' | cut -f 2,4 -d ' '
-oneline
将每个接口的输出强制为一行。
然后,我们从输出中cut
仅输出接口名称和IP,tr
在此过程中对其进行一些分析(以便通过剪切来去除多余的内容)。