grep 来自 ping 输出的持续时间



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

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

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

在 GNUgrep上使用 PCRE 模式,通过启用-P标志,单独提取毫秒值

ping -4 www.google.com | grep -oP ".*time=Kd+" 

其中K转义序列代表

\K:此序列重置报告的匹配项的起点。任何以前匹配的字符都不会包含在最终匹配的序列中。

或者你可以取消任何需要的GNU主义工具,而只使用POSIXsed来做

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

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

这是一个 Perl 正则表达式,它可以做你想要的。请注意使用单引号,它抑制了正则表达式中可能存在的任何*的意外扩展。d+匹配 1 位或多个小数。

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

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

就我个人而言,一旦Perl正则表达式接近一点复杂,我总是使用它。grep的默认值为"基本正则表达式"。您还可以使用--extended-regexp选项进行"扩展正则表达式"。另请参阅维基百科上的POSIX基本和扩展。

最新更新