Tato otázka zde již obsahuje odpovědi :Jak napsat awk skript, který zachytí čas pingu
(2 odpovědi)
Uzavřeno před 3 lety.
Ubuntu
(2 odpovědi)
Uzavřeno před 3 lety.
Potřebuji pomoc s extrahováním pouze hodnoty času při pingu pomocí 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
Takže po použití sed bych chtěl získat následující výstup:
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
Děkuji!
Přijatá odpověď:
Pomocí sed
můžete udělat:
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
To jednoduše hledá nejdelší úsek bez prostoru po time=
, používá k zachycení závorky, abychom jej později mohli označit jako \1
a prostě nahradí vše na lince tím, co bylo zachyceno. -n
(ve výchozím nastavení netisknout) spolu s /p
(vytiskněte, pokud to fungovalo) na konci operátoru substituce zajistí, že vytiskneme pouze relevantní řádky.
sed
bych nepoužil za tímto účelem jsou zde jiné nástroje jednodušší. Například:
-
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)}'