![如何在 shell 脚本中确定远程主机的 IP?](https://linux22.com/image/1437009/%E5%A6%82%E4%BD%95%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%A1%AE%E5%AE%9A%E8%BF%9C%E7%A8%8B%E4%B8%BB%E6%9C%BA%E7%9A%84%20IP%EF%BC%9F.png)
我有一个 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
行括号内的内容。