linux - grep + 如何忽略许多标记行的情况

标签 linux bash grep solaris

我需要从/etc/hosts文件中获取ma​​chine_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/

相关文章:

linux - ssh 可以连接但不能以用户身份登录

c++ - 建立gtest版本

perl - ls 的 Bash 别名,按 "type"打印多列

bash - 检查 git 分支是否包含给定主题的提交

linux - 正则表达式 - 查找具有一个字符串的事件

regex - 如何在 POSIX 正则表达式中将连字符转义为字符范围

linux - 在 sed 中添加前导 0

linux - 如何删除具有 X 天生命周期的文件,而不是上次修改的文件。有没有可能。 Linux

regex - 用 SED 或 AWK(或其他有效的方法)替换日期 - Linux 正则表达式

linux - 目录和字符串 i bash 脚本