将 grep 语法从 Linux 适配到 Solaris

将 grep 语法从 Linux 适配到 Solaris

以下命令

grep -w '^[^#]* machine_VIP' /etc/hosts | head -1 | awk '{print $1}'

在 Linux 上运行良好(它捕获 machine_VIP 别名并从 /etc/hosts 返回 IP 地址并忽略备注行)

例子

cat /etc/hosts
5.5.5.5 GH_T T1 T2 T3#机器_VIP
# 198.2.3.12 MON1 MON2 机器_VIP
18.2.4.12 W1#机器_VIP#机器_VIP#机器_VIP
192.9.200.77 机器_linux1 机器_linux2 机器_VIP
192.9.200.78 machine_linux10 machine_linux20 machine_VIP_test
grep -w '^[^#]* machine_VIP' /etc/hosts | head -1 | awk '{print $1}'
192.9.200.77

但是在 Solaris 上我有相同的主机,当我运行命令时我没有得到任何输出。

那么如何使该命令适合Solaris呢?

答案1

在 Solaris grep 中,-w 选项表示整个模式必须仅匹配word,这与 GNU grep 的 -w 含义不同,匹配必须形成整个单词

如果在模式末尾添加 $,那么它将与上面的示例文件一起使用,并且您不需要 -w 开关:

grep '^[^#]* machine_VIP$' /etc/hosts | head -1 | awk '{print $1}'

...或者如果可行的话,您当然可以在您的 solaris 机器上安装 GNU grep。

答案2

在 Solaris 11 中,使用已安装的 GNU grep:/usr/gnu/bin/grep

相关内容