我有一个 IP 别名,可根据主机的可用性在两个主机之间切换。(这是一个非常大的网络,切换是在本地控制之外完成的。)我需要确定别名何时切换主机,我可以通过检测通过返回的 IP 地址ping
并保持其状态来做到这一点。
我如何解析输出以ping
仅检索 IP 地址?
$ ping -c 1 -w 1 somehost
PING somehost (1.2.3.4) 56(84) bytes of data.
64 bytes from somehost (1.2.3.4): icmp_seq=1 ttl=64 time=1.35 ms
--- somehost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 1.354/1.354/1.354/0.000 ms
答案1
一种可能性是grep
:
$ ping -c 1 -w 1 somehost \
| grep -oP "bytes from [A-Za-z\.]+ (\(\d+\.\d+\.\d+\.\d+\))" \
| grep -oP "\d+\.\d+\.\d+\.\d+"
1.2.3.4
答案2
另一种可能性是同时使用grep
和sed
:
$ ping -c 1 -w 1 somehost \
| grep "bytes from" \
| sed 's/^.*(\(.*\)).*$/\1/'
1.2.3.4
此变体仅解析第一bytes from
行括号内的内容。