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
Другие вопросы по тегам