当我运行时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