Isso deve funcionar na linha de comando ou em um script:
ip=$(ping -c 1 www.google.com | gawk -F'[()]' '/PING/{print $2}')
echo $ip
173.194.34.19
EXPLICAÇÃO
Primeiro, a saída do comando ping
sendo analisado:
$ ping -c 1 www.google.com
PING www.google.com (173.194.40.209) 56(84) bytes of data.
64 bytes from par10s12-in-f17.1e100.net (173.194.40.209): icmp_req=1 ttl=52 time=49.8 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 49.874/49.874/49.874/0.000 ms
-
ip=$(COMMAND)
: atribua a saída deCOMMAND
à variável$ip
. -
ping -c 1 www.google.com
: ping no google uma vez. -
gawk
é uma poderosa linguagem de script que processa a entrada linha por linha e campos por campo. -
-F'[()]'
:-F
setsgawk
's delimitador (es) de campo. Aqui, estamos configurando para uma classe de caractere ([ ]
), especificamente para abrir e fechar parênteses. Isso significa que tudo até o primeiro)
ou(
será o primeiro campo que, emgawk
, é$1
. Estamos interessados apenas na primeira linha, então dizemos agawk
para imprimir o 2º campo ($2
), que é o IP, somente se a linha atual contiver "PING" (/PING/
).
Assim, os resultados de todo o shebang são salvos como ip
, ao qual você pode se referir como $ip
.