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'[()]':-Fsetsgawk'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 agawkpara 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 .