solaris + sintaxe grep no solaris

1

meu alvo é combinar exatamente o string snmpmanager do arquivo hosts no solaris & linux

o seguinte comando funciona no Linux (red-hat 5.1), mas não no SunOS, por favor, como ajustar a sintaxe do solaris?

exemplo do sistema operacional solaris

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

depois de corrigi-lo para

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

mas não recebo nenhuma saída de correspondência (mas o snmpmanager já está definido no arquivo host)

meu arquivo host

     10.170.10.5      loghost
     10.170.10.61   Master SyslogSer vip Tcc NtpServer1 NtpServer2 snmpManager snmpManagerPA1 snmpManagerPA2
    
por Eytan 08.02.2012 / 17:03

5 respostas

3

Eu não acho que o padrão do Solaris (e) grep entenda a sintaxe [[:space:]] , então você teria que usar algo como

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

onde <-TAB-> é Ctrl-V Guia

Se você usar / usr / xpg4 / bin / egrep, ele funcionará como esperado.

/usr/xpg4/bin/egrep -i '([[:space:]])snmpmanager($|[[:space:]])'  /etc/hosts
    
por 08.02.2012 / 18:31
1

use egrep -ic em vez de grep -icE . Note que -i está tornando o caso de jogo insensível, o que pode ou não ser o que você quer, dependendo da sua definição de "Exatamente"

    
por 08.02.2012 / 17:17
1

Tradicionalmente (como existe no Solaris), havia três versões alternativas de grep : também havia egrep , fgrep e rgrep .

De acordo com o POSIX, essas três variantes estão agora incluídas como opções para grep :

  • egrep é equivalente a grep -E
  • fgrep é equivalente a grep -F
  • rgrep é equivalente a grep -r

Assim, com sua invocação, você quer isso:

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

(Isto assume que não há outros erros.)

    
por 08.02.2012 / 17:42
1

O Solaris grep não é o grep do GNU dos coreutils, portanto, o comportamento em casos mais complexos provavelmente será diferente.

Uma ideia seria instalar o GNU grep. Se você instalar o pacote ggrep do OpenCSW, ele instalará o GNU grep como /opt/csw/bin/ggrep com um link adicional em /opt/csw/gnu/grep .

Primeiro você faz o bootstrap do pkgutil:

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

Agora você pode instalar o GNU grep:

pkgutil -y -i ggrep

Você pode adicionar /opt/csw/gnu ao seu PATH , o que permitirá que você use o comando grep da mesma maneira que no Linux.

Se você quiser usar seu script, escreva:

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

A manpage do grep no Solaris 11 apontou para /usr/xpg4/bin/grep se quisermos usar o -E Eu tentei e funcionou no meu caso.

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

Tags