如何使用shell修改终端中ping命令的输出?

如何使用shell修改终端中ping命令的输出?,shell,ping,Shell,Ping,典型ping命令的输出为- --- 192.168.1.107 ping statistics --- 2 packets transmitted, 1 received, 50% packet loss, time 1008ms rtt min/avg/max/mdev = 0.288/0.288/0.288/0.000 ms 在shell脚本中运行ping命令时,我只想在终端窗口上显示“50%数据包丢失”部分。我应该如何处理它?使用grep -o告诉grep只打印匹配部分: ping -c

典型ping命令的输出为-

--- 192.168.1.107 ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1008ms
rtt min/avg/max/mdev = 0.288/0.288/0.288/0.000 ms
在shell脚本中运行ping命令时,我只想在终端窗口上显示“50%数据包丢失”部分。我应该如何处理它?

使用grep
-o
告诉
grep
只打印匹配部分:

ping -c2 -q targethost | grep -o '[^ ]\+% packet loss'
使用awk 如果ping的输出被视为逗号分隔的字段,那么,如示例输出中所示,数据包丢失信息位于第三个字段中。这允许我们按如下方式使用awk:

ping -c2 -q targethost | awk -F, '/packet loss/{print $3;}'
使用grep:

ping -c10 -f -q localhost | grep -E -o '[^[:space:]]+ packet loss'
使用awk:

ping -c10 -f -q localhost | awk -F', ' '/packet loss/ { print $3 }'

grep-o不是posix,而awk解决方案取决于输出格式。

ping-c2-qremotehost | sed-n/*接收到,\([0-9]*%[^,]*\)./\1/p'
将工作,但取决于
ping
输出的格式。