(2 réponses)
Fermé il y a 3 ans.
J'ai besoin d'aide pour extraire uniquement la valeur de l'heure lors du ping à l'aide de 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
Ainsi, après avoir utilisé sed, j'aimerais obtenir le résultat suivant :
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
Merci !
Réponse acceptée :
Avec sed
vous pouvez faire :
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Cela recherche simplement la plus longue étendue de non-espace après time=
, utilise des parenthèses pour le capturer afin que nous puissions plus tard nous y référer en tant que \1
et remplace simplement tout sur la ligne avec tout ce qui a été capturé. Le -n
(ne pas imprimer par défaut) avec le /p
(imprimer si cela a fonctionné) à la fin de l'opérateur de substitution assurez-vous que nous n'imprimons que les lignes pertinentes.
Je n'utiliserais pas sed
pour cela cependant, d'autres outils sont plus simples ici. Par exemple :
-
grep
ping 192.168.1.1 | grep -Po 'time=\K\S+'
-
Perle
ping 192.168.1.1 | perl -lne '/time=(\S+)/ && print $1'
-
ok
ping 192.168.1.1 | awk -F'[= ]' '/time=/{print $(NF-1)}'