A pesquisa recursiva não funciona para o grep no solaris

18

Em nosso servidor Solaris, estou descobrindo que grep -r não funciona, que é a maneira usual de usar grep . Parece que egrep tem o mesmo comportamento.

Como não tenho controle sobre a máquina, existe uma maneira de ter grep executando uma pesquisa recursiva? Ou preciso enviar a saída de find para grep ?

    
por Eric Wilson 09.12.2011 / 20:16

6 respostas

4

Não estou familiarizado com o Solaris, mas se você estiver migrando do GNU / Linux para o Solaris, verá que a maioria dos comandos se comportará de maneira um pouco diferente. A versão GNU das ferramentas Unix tem recursos adicionais ausentes nos Unixes "proprietários".

Você pode baixar o (s) GNU grep (s) aqui e depois compilar e instalar.

Se você tiver acesso root, talvez queira executar configure --prefix = / usr / local Tal que os utilitários instalem em / usr / local

Se você não tiver acesso root, talvez queira executar configure --prefix = $ {HOME} Tal que os utilitários instalem em seu diretório home

    
por 09.12.2011 / 20:29
30

Se você quiser usar find , essa seria a maneira mais rápida:

find . -type f -exec grep pattern {} +

No entanto, o Gnu grep provavelmente já está instalado em sua máquina.

Faz parte da instalação padrão no Solaris 11 em /usr/gnu/bin/grep . O mesmo para o Solaris 10, onde você o encontra em /usr/sfw/bin/ggrep . Em versões mais antigas, pode ter sido instalado a partir de sunfreeware ou outros repositórios, verifique /usr/local/bin/grep e /opt/csw/bin/grep para localizações comuns.

    
por 09.12.2011 / 21:26
6

Use ggrep em seu lugar, se estiver instalado.

Por exemplo Procure por "mysearchstring" do diretório atual até todos os subdiretórios ( -R ), e mostre o nome do arquivo e o caminho para correspondências ( -H ) e ignore os arquivos binários ( -I ). Não esqueça o * no final do comando.

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

O ggrep está localizado em /usr/sfw/bin Você pode adicioná-lo ao seu perfil com um comando EXPORT para poder chamá-lo diretamente da linha de comando.

PATH=$PATH:/usr/sfw/bin
export PATH

Versão do Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise

    
por 21.02.2013 / 05:36
3

Faça o download do script ack perl autônomo de link , coloque-o em seu $HOME/bin e aprenda a usá-lo. Eu acho que é, como anunciado, melhor que o grep para muitos usos no meu trabalho diário de desenvolvimento.

    
por 10.12.2011 / 02:53
3

O Solaris grep não possui a opção -r .

Você pode usar o seguinte comando.

find . -type f | xargs grep 'sometext'
    
por 09.12.2011 / 20:40
1

Sim, você precisará do grep do GNU. Pessoalmente, eu não sinto falta do sinalizador "-r" porque você pode fazer o mesmo com uma combinação de find e grep , mas isso lembra que ter as ferramentas GNU disponíveis na sua caixa Solaris é o que eu consideraria a melhor prática. Então aqui vamos nós:

Eu não iria baixar o código-fonte de vários lugares da Internet e depois construir você mesmo. Isso não é necessário. Se você simplesmente quer que seu Solaris tenha as ferramentas GNU típicas disponíveis, faça o seguinte:

Se você estiver no 10 Solaris , deverá obter o disco complementar do Solaris 10. Isso costumava ser distribuído pela Sun, mas agora vive aqui . Pessoalmente eu faria um habbit sempre para instalar o conteúdo deste disco ou pelo menos as partes GNU mais importantes. Faça parte do seu JumpStart (ou o que você usa) para novos servidores em sua organização!

Se você está no 11 Solaris a vida é muito mais simples. As ferramentas GNU são normalmente instaladas por padrão, mas nem todas são propagadas em zonas locais. O IFS, o sistema de empacotamento no Solaris 11, torna sua vida muito mais fácil, então você deve estar migrando para o Solaris 11 (muitas outras razões também). A lista de pacotes que você deve considerar sempre ter disponível para qualquer zona é a seguinte:

pkg://solaris/archiver/gnu-tar
pkg://solaris/developer/gnu-binutils
pkg://solaris/diagnostic/top
pkg://solaris/file/gnu-coreutils
pkg://solaris/file/gnu-findutils
pkg://solaris/text/gawk
pkg://solaris/text/gnu-diffutils
pkg://solaris/text/gnu-grep
pkg://solaris/text/gnu-sed

e se você usar o host para fins de desenvolvimento / construção, talvez queira adicionar:

pkg://solaris/developer/build/gnu-make
pkg://solaris/developer/build/make
pkg://solaris/developer/gcc-45
pkg://solaris/system/header
pkg://solaris/developer/build/autoconf
pkg://solaris/developer/build/automake-110

Pessoalmente, eu faria a parte acima (potencialmente menos a ferramenta de desenvolvimento) da instalação padrão da minha empresa para novos servidores / zonas. Os administradores de sistema Solaris insistem frequentemente em ser diferentes do mundo Linux, mas não há realmente necessidade disso. Basta fazer isso e torná-lo parte de sua instalação padrão. Você não vai se arrepender.

    
por 27.02.2013 / 14:03