Назад | Перейти на главную страницу

синтаксис solaris + grep в solaris

моя цель - точно соответствовать строке snmpmanager из файла hosts на Solaris и Linux

следующая команда работает в 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

Я не думаю, что стандартный Solaris (e) grep понимает [[:space:]] синтаксис, поэтому вам придется использовать что-то вроде

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

где <-TAB-> является Ctrl-VВкладка

Если вы используете / usr / xpg4 / bin / egrep, то он работает должным образом.

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

использовать egrep -ic вместо того grep -icE. Обратите внимание, что -i делает совпадение нечувствительным к регистру, что может или не может быть тем, что вы хотите, в зависимости от вашего определения "Точно".

Традиционно (например, в Solaris) существовало три альтернативных версии grep: было также egrep, fgrep, и rgrep.

Согласно POSIX, эти три варианта теперь включены как опции для grep:

  • egrep эквивалентно grep -E
  • fgrep эквивалентно grep -F
  • rgrep эквивалентно grep -r

Таким образом, с вашим вызовом вы хотите это:

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

(Предполагается, что других ошибок нет.)

Solaris grep не является GNU grep от coreutils, поэтому поведение в более сложных случаях, вероятно, будет другим.

Одна из идей - установить GNU grep. Если вы установите пакет ggrep из OpenCSW, он установит GNU grep как /opt/csw/bin/ggrep с дополнительной символической ссылкой в /opt/csw/gnu/grep.

Сначала вы загружаете pkgutil:

wget http://mirror.opencsw.org/opencsw/pkgutil.pkg
pkgadd -d pkgutil.pkg
pkgutil -U

Теперь вы можете установить GNU grep:

pkgutil -y -i ggrep

Можете добавить /opt/csw/gnu на ваш PATH, что позволит вам использовать grep команда так же, как в Linux.

Если вы хотите использовать его в своем скрипте, вы можете написать:

/opt/csw/bin/ggrep -icE '(^|[[:space:]])snmpmanager($|[[:space:]])' /etc/hosts

Справочная страница grep в Solaris 11 указала на /usr/xpg4/bin/grepесли мы хотим использовать -E Я попробовал, и в моем случае это сработало.

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