У меня есть IP-псевдоним, который переключается между двумя хостами в зависимости от доступности хоста. (Это очень большая сеть, и переключение выполняется извне локального управления.) Мне нужно определить, когда псевдоним переключил хосты, и я могу сделать это, обнаружив IP-адрес, возвращенный через ping и сохранив его в состоянии.

Как я могу проанализировать вывод команды ping чтобы получить только IP-адрес?

$ ping -c 1 -w 1 somehost
PING somehost (1.2.3.4) 56(84) bytes of data.
64 bytes from somehost (1.2.3.4): icmp_seq=1 ttl=64 time=1.35 ms

--- somehost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 1.354/1.354/1.354/0.000 ms

2 ответа2

0

Одна возможность с помощью grep:

$ ping -c 1 -w 1 somehost \
    | grep -oP "bytes from [A-Za-z\.]+ (\(\d+\.\d+\.\d+\.\d+\))" \
    | grep -oP "\d+\.\d+\.\d+\.\d+"
1.2.3.4
0

Другая возможность - с помощью grep и sed:

$ ping -c 1 -w 1 somehost \
  | grep "bytes from" \
  | sed 's/^.*(\(.*\)).*$/\1/'
1.2.3.4

Этот вариант просто разбирает все, что находится в скобках на первых bytes from строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .