solaris + solaris 中的 grep 语法

solaris + solaris 中的 grep 语法

我的目标是精确匹配 solaris 和 linux 上的 hosts 文件中的字符串 snmpmanager

以下命令在 Linux (red-hat 5.1) 上运行,但不在 SunOS 上运行,请建议如何使语法适合 solaris?

来自 solaris 操作系统的示例

   grep -icE '(^|[[:space:]])snmpmanager($|[[:space:]])' /etc/hosts
   grep: illegal option -- E

在我修复它之后

       egrep -i '(^|[[:space:]])snmpmanager($|[[:space:]])'  /etc/hosts
  or   egrep -i '(^|[\s])snmpmanager($|\s])'  /etc/hosts
  or   egrep -i '(^|[\t])snmpmanager($|\t])'  /etc/hosts

但我没有得到任何匹配输出(但 snmpmanager 已在主机文件中定义)??

我的主机文件

     10.170.10.5      loghost
     10.170.10.61   Master SyslogSer vip Tcc NtpServer1 NtpServer2 snmpManager snmpManagerPA1 snmpManagerPA2

答案1

我认为标准 Solaris (e)grep 不理解语法,[[:space:]]因此您必须使用类似

egrep -i (^| |<-TAB->)snmpmanager($| |<-TAB->)

哪里<-TAB->Ctrl-VTab

如果您使用 /usr/xpg4/bin/egrep,那么它会按预期工作。

/usr/xpg4/bin/egrep -i '([[:space:]])snmpmanager($|[[:space:]])'  /etc/hosts

答案2

使用egrep -ic而不是grep -icE。请注意,-i 使匹配不区分大小写,这可能是也可能不是您想要的,具体取决于您对“完全匹配”的定义

答案3

传统上(例如在 Solaris 中)有三个替代版本grep:还有egrepfgreprgrep

根据 POSIX,这三种变体现在作为选项包含在以下版本中grep

  • egrep相当于grep -E
  • fgrep相当于grep -F
  • rgrep相当于grep -r

因此,通过您的调用,您需要这样做:

egrep -ic '(^|[[:space:]])snmpmanager($|[[:space:]])' /etc/hosts

(假设没有其他错误。)

答案4

Solaris 11 中的 grep 手册页指出/usr/xpg4/bin/grep如果我们想使用,-E 我尝试过它,并且它在我的情况下有效。

/usr/xpg4/bin/grep -E "DisplayConnect[[:space:]]*/etc/issue" /etc/proftpd.conf
DisplayConnect      /etc/issue

相关内容