Linux 在 1 行输出中打印多个 IP 地址 (ifconfig)

Linux print multiple IP Address (ifconfig) in 1 line output

这是标准的 Linux ifconfig 命令

user@linux:~$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:00:00:00:00:10  
          inet addr:192.168.1.1  Bcast:192.168.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:112 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14616 (14.2 KiB)  TX bytes:17776 (17.3 KiB)

eth1      Link encap:Ethernet  HWaddr 00:00:00:00:00:11
          inet addr:10.0.1.1  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

user@linux:~$

这是仅从 ifconfig

打印 IP 地址
user@linux:~$ cat script.sh
ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print }'
user@linux:~$ 

输出看起来像这样

user@linux:~$ ./script.sh
192.168.1.1
10.0.1.1
user@linux:~$

我想要完成的是在 1 行中打印 IP 地址的输出...类似这样。

user@linux:~$ ./script2.sh
192.168.1.1 10.0.1.1
user@linux:~$

ifconfig 可以吗?如果是的话,如果你能分享这个技巧,我将不胜感激。谢谢

如果你有 hostname,

hostname -I

测试:

$ hostname -I
192.168.2.253 192.168.0.179
ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print }' | { tr '\n' ' '; echo; }

您的代码几乎可以正常运行。只需将换行符转换为 space 并添加更多换行符即可。

ifconfig | awk '{match([=10=],/inet addr:([^ ]+)/,a);x=x FS a[1]}END {print x} '
  142.133.152.191         127.0.0.1

或使用grep

ifconfig | grep -oP 'inet addr:\K[^ ]+' | xargs
142.133.152.191 127.0.0.1