grep ping输出的持续时间

时间:2018-03-25 06:16:56

标签: linux bash grep ping

我想写一个bash代码,它只给了我ping的时间。 我试着这样做了:

ping -4 www.google.com | grep -oh "time=* ms"

但我知道它不会给我只是时间,但我认为它会将它减少到time=30 ms。它虽然没有输出。

2 个答案:

答案 0 :(得分:3)

通过启用grep标志,在GNU -P上使用PCRE模式,仅提取毫秒值

ping -4 www.google.com | grep -oP ".*time=\K\d+" 

\K转义序列代表

  

\ K:This sequence resets the starting point of the reported match. Any previously matched characters are not included in the final matched sequence.

或者您可以取消所需的任何GNU-ism工具,只需使用POSIX sed即可

ping -4 www.google.com | sed -n 's/.*time=\([[:digit:]]*\).*/\1/p'

答案 1 :(得分:0)

您使用的正则表达式不正确。

这是Perl regular expression,可以满足您的需求。请注意使用单引号来抑制可能在正则表达式中的任何*的意外扩展。 \d+匹配1个或更多小数。

echo "time=12 ms" | grep -oh --perl-regex 'time=\d+ ms'
time=12 ms

在这种情况下,-h也可以省略。

就个人而言,一旦接近有点复杂,我总是使用Perl正则表达式。 grep的默认值为"basic regular expression"。您也可以使用--extended-regexp选项"extended regular expressions"。另请参阅维基百科上的POSIX basic and extended