(2 Antworten)
Vor 3 Jahren geschlossen.
Ich brauche Hilfe, um nur den Zeitwert zu extrahieren, wenn ich mit sed pinge.
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
Nach der Verwendung von sed möchte ich also die folgende Ausgabe erhalten:
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
Vielen Dank!
Akzeptierte Antwort:
Mit sed
Sie können Folgendes tun:
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Das sucht einfach nach der längsten Nicht-Leerstelle nach time=
, verwendet Klammern, um es zu erfassen, damit wir es später als \1
bezeichnen können und ersetzt einfach alles in der Leitung durch das, was erfasst wurde. Das -n
(standardmäßig nicht drucken) zusammen mit /p
(drucken, falls dies funktioniert hat) am Ende des Substitutionsoperators stellen Sie sicher, dass wir nur relevante Zeilen drucken.
sed
würde ich nicht verwenden Dafür sind andere Tools hier einfacher. Zum Beispiel:
-
grep
ping 192.168.1.1 | grep -Po 'time=\K\S+'
-
Perl
ping 192.168.1.1 | perl -lne '/time=(\S+)/ && print $1'
-
ach
ping 192.168.1.1 | awk -F'[= ]' '/time=/{print $(NF-1)}'