grep ping 输出的持续时间

grep the time duration from ping output

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

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

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

通过启用 -P 标志在 GNU grep 上使用 PCRE 模式,单独提取 milli-seconds 值

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:]]*\).*//p'

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

这里有一个 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". You can also have "extended regular expressions" using --extended-regexp option. See also POSIX basic and extended