Фильтрация вывода ifconfig

Я пытаюсь выбрать первые 3 октета IPv4 IP из ifconfig. Как мне это сделать. Я просто не могу понять, как выбрать на этом шаге

[root@hostname ~]# ifconfig | grep "inet addr:"  | grep -v "127.0.0.1" | awk '{print $2}'

Вывод:

addr:10.20.1.3

то, что я в конечном итоге хочу, это 10.20.1 для окончательного вывода

0
06.07.2017, 06:40
3 ответа

Предполагая, что вы ищете IP-адрес eth0, это должно сделать это:

ifconfig | grep -A1 eth0 | grep "inet addr" | sed 's/inet addr://' | awk '{ print $1 }' | sed 's/\.[0-9]*$//'
0
28.01.2020, 04:44

Использование только awk для всех интерфейсов:

ifconfig | awk '/Link encap/{eth=$1} ; /inet addr/{sub(/addr:/, "", $2) ; sub(/\.[0-9]*$/,"",$2) ; addr=$2 ; print eth, addr)'

Результаты:

eth0 192.168.0
lo 127.0.0
1
28.01.2020, 04:44

Я бы даже не стал использовать sedвместо фактического адреса. Более прозрачно (и проще правильно )использовать cutдля этого!

Добавьте | sed -e 's/inet_addr://' | cut -d. -f 1-3в конец исходной команды:

ifconfig | grep "inet addr:"  | grep -v "127.0.0.1" | awk '{print $2}' | sed -e 's/inet_addr://' | cut -d. -f 1-3  

Или просто используйте cutвместоawk:

ifconfig | grep "inet addr:"  | grep -v "127.0.0.1" | cut -w -f 2 | sed -e 's/inet_addr://' | cut -d. -f 1-3  
0
28.01.2020, 04:44

Теги

Похожие вопросы