我想写一个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基本和扩展。