返回动态 ping 的子字符串

返回动态 ping 的子字符串

当我运行时ping example.com,它会在控制台中打印每次交换的结果。我想过滤每个结果,以便它只显示其中的一个子集,而不是显示所有信息。

所以,而不是:

PING example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=55 time=1201 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=55 time=783 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=55 time=417 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=55 time=159 ms
64 bytes from 93.184.216.34: icmp_seq=6 ttl=55 time=886 ms

我希望终端中打印的结果是:

1201ms
783ms
417ms
159ms
886ms

我会接受ping具体的答案,但我更喜欢一个通用的答案,它可以接受任何动态过程并处理它返回的每个字符串到其他字符串,因为这会更通用。我对 shell 解决方案特别感兴趣,同样的方式xargs是 shell 解决方案来解决某些程序接受管道重定向的限制。

答案1

我的建议使用sed.我不明白你的动态字符串是什么意思,除了你想将某些东西转换成其他东西。大多数过滤器都会这样做。

ping -c 3 1.1.1.1 | sed -En 's/.*=([0-9.]+) ([a-z]+)$/\1\2/p'
32.5ms
34.5ms
37.5ms

答案2

不知道“接受任何动态过程”是什么意思,但在你的ping情况下,你可以将其输出传送到cut

ping example.com | cut -d= -f4
12.6 ms
11.3 ms
19.4 ms

相关内容