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
转义序列代表
或者您可以取消任何 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。
我想写一个 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
转义序列代表
或者您可以取消任何 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。