(2 respuestas)
Cerrado hace 3 años.
Necesito ayuda para extraer solo el valor del tiempo al hacer ping con sed.
ping 192.168.1.1
PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.
64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.027 ms
64 bytes from 192.168.1.11: icmp_seq=3 ttl=64 time=0.024 ms
64 bytes from 192.168.1.11: icmp_seq=4 ttl=64 time=0.031 ms
Entonces, después de usar sed, me gustaría obtener el siguiente resultado:
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
¡Gracias!
Respuesta aceptada:
Con sed
puedes hacer:
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Eso simplemente busca el tramo más largo de no espacio después de time=
, usa paréntesis para capturarlo para que luego podamos referirnos a él como \1
y simplemente reemplaza todo en la línea con lo que haya sido capturado. El -n
(no imprimir por defecto) junto con /p
(imprimir si esto funcionó) al final del operador de sustitución, asegúrese de que solo imprimamos las líneas relevantes.
Yo no usaría sed
para esto, sin embargo, otras herramientas son más simples aquí. Por ejemplo:
-
grep
ping 192.168.1.1 | grep -Po 'time=\K\S+'
-
Perl
ping 192.168.1.1 | perl -lne '/time=(\S+)/ && print $1'
-
awk
ping 192.168.1.1 | awk -F'[= ]' '/time=/{print $(NF-1)}'