我需要从/etc/hosts文件中获取machine_VIP(完全匹配)
问题是在 hosts 文件中有一些带有 machine_VIP 的行,但是它们在 machine_VIP 之前被注释了,或者该行被注释了
所以在这种情况下我们需要忽略那些行
同时我编写了以下命令以获取存在于 machine_VIP 行中的 IP 但它没有使用正确的 IP,因为注释字符 #
Cluster_VIP=` grep -iw machine_VIP /etc/hosts | awk '{print $1}' | head -1 `
示例:(我的主机文件)
5.5.5.5 GH_T T1 T2 T3 # machine_VIP
# 198.2.3.12 MON1 MON2 machine_VIP
18.2.4.12 W1 # machine_VIP # machine_VIP # machine_VIP
192.9.200.77 machine_linux1 machine_linux2 machine_VIP
192.9.200.78 machine_linux10 machine_linux20 machine_VIP_test
请告知我需要在我的命令中添加什么以获得正确匹配的 IP
根据下面的例子,预期的结果应该是:
echo $Cluster_VIP
192.9.200.77
最佳答案
您可以使用 getent
命令来完成它,而不是 grep
命令。
[root@myserver ~]# cat /etc/hosts
5.5.5.5 GH_T T1 T2 T3 # machine_VIP
# 198.2.3.12 MON1 MON2 machine_VIP
18.2.4.12 W1 # machine_VIP # machine_VIP # machine_VIP
192.9.200.77 machine_linux1 machine_linux2 machine_VIP
192.9.200.78 machine_linux10 machine_linux20 machine_VIP_test
[root@myserver ~]# Cluster_VIP=$(getent hosts machine_VIP |awk '{print $1}')
[root@myserver ~]# echo $Cluster_VIP
192.9.200.77
关于linux - grep + 如何忽略许多标记行的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828847/