(2 risposte)
Chiuso 3 anni fa.
Ho bisogno di aiuto per estrarre solo il valore del tempo durante il 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
Quindi, dopo aver usato sed, vorrei ottenere il seguente output:
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
Grazie!
Risposta accettata:
Con sed
puoi fare:
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Questo cerca semplicemente il tratto di non spazio più lungo dopo time=
, usa le parentesi per catturarlo in modo da poterlo chiamare in seguito \1
e sostituisce semplicemente tutto sulla linea con tutto ciò che è stato catturato. Il -n
(non stampare per impostazione predefinita) insieme a /p
(stampa se ha funzionato) alla fine dell'operatore di sostituzione assicurati di stampare solo le righe pertinenti.
Non userei sed
per questo però, altri strumenti sono più semplici qui. Ad esempio:
-
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)}'