如何按时间过滤 ping 结果?

Jas*_*son 0 shell-script text-processing ping

如何过滤掉特定毫秒以下的任何 ping,即,仅将 500 毫秒以上的 ping 响应回显到文本文件?

IP=$1
SECONDS_Between_Pings=$2

ping -i $2 $1 | while read pong; do echo $(date) $pong; done >> ~/Downloads/pings_file_$(date +%Y-%m-%d).txt
Run Code Online (Sandbox Code Playgroud)

gli*_*dud 6

grep 使用扩展正则表达式:

ping ... | grep --line-buffered -E 'time=([0-9]{4}|[5-9][0-9]{2})' | ...
Run Code Online (Sandbox Code Playgroud)

这将匹配任何行,time=紧跟其后的是:

  • 任何 4 位数字(1000+ 毫秒)。
  • 一位数字 5-9 后跟任意 2 位数字(500-999 毫秒)。

--line-buffered解决了在管道链中使用时grep默认输出缓冲引起的问题。当 grep 是链中的最后一个链接时不需要。