Linux печатает несколько IP-адресов (ifconfig) в выводе в 1 строку
Это стандартная команда 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:~$
И это для печати только IP-адреса из ifconfig
user@linux:~$ cat script.sh
ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print $1}'
user@linux:~$
Вывод выглядит так
user@linux:~$ ./script.sh
192.168.1.1
10.0.1.1
user@linux:~$
То, что я пытаюсь сделать, это напечатать вывод IP-адреса в 1 строку... что-то вроде этого.
user@linux:~$ ./script2.sh
192.168.1.1 10.0.1.1
user@linux:~$
Возможно ли это с помощью ifconfig? Если да, я был бы признателен, если бы вы могли поделиться трюком. Спасибо
3 ответа
Решение
ifconfig | grep ad.*Bc | cut -d: -f2 | awk '{ print $1}' | { tr '\n' ' '; echo; }
Ваш код практически функционален. Просто преобразуйте новую строку в пробел и добавьте новую строку.
Если у вас есть hostname
,
hostname -I
Тестовое задание:
$ hostname -I
192.168.2.253 192.168.0.179
ifconfig | awk '{match($0,/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