如何提取ping命令延迟数值以制作类Linux风格的ping图表?
提取Linux ping命令中的延迟数值
针对你使用的ping -c 1 -i 1 "google.com"命令,以下几种方法可以直接提取出类似86 ms里的延迟数值:
方法1:grep + Perl正则表达式
利用grep的Perl正则模式,精准匹配time=后的数值部分:
ping -c 1 -i 1 google.com | grep -oP 'time=\K[\d.]+'
-o只输出匹配的部分,-P启用Perl正则,\K表示忽略前面的time=,只保留后面的数字和小数点(支持小数延迟,比如86.3)。
方法2:sed替换提取
通过sed的字符串替换功能,捕获并提取目标数值:
ping -c 1 -i 1 google.com | sed -n 's/.*time=\([0-9.]\+\) ms.*/\1/p'
-n仅输出匹配的行,正则中的\([0-9.]\+\)捕获time=和ms之间的数值,\1引用捕获的内容并输出。
方法3:awk字段分割处理
利用awk分割输出字段,直接定位到包含延迟的字段:
ping -c 1 -i 1 google.com | awk '/time=/ {split($7, arr, "="); print arr[2]}'
/time=/匹配包含延迟信息的行,$7是输出中time=xxx ms所在的字段,用split按=分割后,取第二个元素就是延迟数值。
带失败判断的脚本示例
如果需要处理ping失败(如域名解析失败、请求超时)的情况,可以用bash脚本封装:
#!/bin/bash target="google.com" ping_output=$(ping -c 1 -i 1 "$target") if echo "$ping_output" | grep -q "time="; then latency=$(echo "$ping_output" | grep -oP 'time=\K[\d.]+') echo "到$target的延迟: $latency ms" else echo "ping $target失败: $(echo "$ping_output" | tail -n1)" fi
内容的提问来源于stack exchange,提问作者Forklift
相关产品推荐
相关产品推荐

