试图仅从ping
输出中捕获数据包返回时间,我发出
$ ping 192.168.0.1 | grep -o '[^ =]* ms'
它起作用了,显示每个数据包到达的时间。由于我也想摆脱时间单位,因此认为这就足够了:
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | grep -o '^[^ ]*'
但是,令我惊讶的是,它挂起,没有显示输出。echo
但是,用输出中的示例行替换第一个命令ping
可以按预期工作(它输出5.07
):
$ echo '64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=5.07 ms' | grep -o '[^ =]* ms' | grep -o '^[^ ]*'
我找到了其他方法来获取没有毫秒单位的时间,但仍然:ping
命令有什么问题?为什么通过一个管道可以,但不能通过两个?
PS:下面的这些也失败了,而他们的echo
版本成功了,所以问题不在于grep
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | sed 's_ ms__'
$ ping 192.168.0.1 | grep -o '[^ =]* ms' | cut -f 1 -d ' '
$ ping 192.168.0.1 | cut -f 7 -d ' ' | cut -f 2 -d '='