从终端提取值

Ana*_*a.B 4 command-line

我需要帮助才能在使用 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)

谢谢!

ter*_*don 7

有了sed你可以这样做:

ping 192.168.1.1 | sed -n 's/.*time=\([^ ]*\).*/\1/p'
Run Code Online (Sandbox Code Playgroud)

这只是在 之后寻找最长的非空间段time=,使用括号来捕获它,以便我们以后可以将其称为\1并且只是用捕获的任何内容替换该行上的所有内容。该-n(默认情况下不打印),与一起/p在替换操作的结束(打印,如果这个工作),确保我们只打印相关线路。

不过我不会sed为此使用,其他工具在这里更简单。例如:

  1. 格雷普

    ping 192.168.1.1 | grep -Po 'time=\K\S+'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 珀尔

    ping 192.168.1.1 | perl -lne '/time=(\S+)/ && print $1'
    
    Run Code Online (Sandbox Code Playgroud)
  3. awk

    ping 192.168.1.1 | awk -F'[= ]' '/time=/{print $(NF-1)}'
    
    Run Code Online (Sandbox Code Playgroud)