我想写一个bash代码,它只给了我ping的时间。 我试着这样做了:
ping -4 www.google.com | grep -oh "time=* ms"
但我知道它不会给我只是时间,但我认为它会将它减少到time=30 ms
。它虽然没有输出。
答案 0 :(得分:3)
通过启用grep
标志,在GNU -P
上使用PCRE模式,仅提取毫秒值
ping -4 www.google.com | grep -oP ".*time=\K\d+"
\K
转义序列代表
或者您可以取消所需的任何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。