моя цель - точно соответствовать строке 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