Uma possibilidade é com 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
Eu tenho um alias de IP que alterna entre dois hosts, dependendo da disponibilidade do host. (Essa é uma rede muito grande e a comutação é feita externamente do controle local.) Preciso determinar quando o alias mudou os hosts, e posso fazer isso detectando o endereço IP retornado por ping
e mantendo-o no estado.
Como posso analisar a saída de ping
para recuperar apenas o endereço 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
Uma possibilidade é com 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
Outra possibilidade é com grep
e sed
:
$ ping -c 1 -w 1 somehost \
| grep "bytes from" \
| sed 's/^.*(\(.*\)).*$//'
1.2.3.4
Esta variante apenas analisa o que está entre parênteses na primeira linha bytes from
.