我需要帮助才能在使用 sed ping 时仅提取时间值。
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
Run Code Online (Sandbox Code Playgroud)
所以在使用 sed 后,我想得到以下输出:
ping 192.168.1.1 | sed '???'
0.028
0.027
0.024
0.031
Run Code Online (Sandbox Code Playgroud)
谢谢!
有了sed你可以这样做:
ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Run Code Online (Sandbox Code Playgroud)
这只是在 之后寻找最长的非空间段time=,使用括号来捕获它,以便我们以后可以将其称为\1并且只是用捕获的任何内容替换该行上的所有内容。该-n(默认情况下不打印),与一起/p在替换操作的结束(打印,如果这个工作),确保我们只打印相关线路。
不过我不会sed为此使用,其他工具在这里更简单。例如:
格雷普
ping 192.168.1.1 | grep -Po 'time=\K\S+'
Run Code Online (Sandbox Code Playgroud)珀尔
ping 192.168.1.1 | perl -lne '/time=(\S+)/ && print $1'
Run Code Online (Sandbox Code Playgroud)awk
ping 192.168.1.1 | awk -F'[= ]' '/time=/{print $(NF-1)}'
Run Code Online (Sandbox Code Playgroud)