Я пытаюсь выбрать первые 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
для окончательного вывода
Предполагая, что вы ищете IP-адрес eth0
, это должно сделать это:
ifconfig | grep -A1 eth0 | grep "inet addr" | sed 's/inet addr://' | awk '{ print $1 }' | sed 's/\.[0-9]*$//'
Использование только 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
Я бы даже не стал использовать 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