A pesquisa recursiva não funciona para grep no solaris

20

No nosso servidor Solaris, acho que grep -risso não funciona, que é a maneira usual que uso grep. Parece que egreptem o mesmo comportamento.

Como não tenho controle sobre a máquina, existe uma maneira de grepexecutar uma pesquisa recursiva? Ou preciso canalizar a saída findpara grep?

Eric Wilson
fonte
11
Qual versão do Solaris você está usando?
Jlliagre

Respostas:

4

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

Você pode fazer o download do GNU grep (s) aqui e compilar e instalar.

Se você tiver acesso root, poderá executar configure --prefix = / usr / local Para que os utilitários sejam instalados em / usr / local

Se você não tiver acesso root, poderá executar o configure --prefix = $ {HOME} para que os utilitários sejam instalados no diretório inicial

bsd
fonte
--prefix=${HOME}}/.localé provavelmente mais aconselhável ... não há necessidade de encher o diretório home com sharee libpastas
jpaugh
11
Desordenado de um homem é de outro homem organizado
BSD
Sem dúvida! Sinceramente, estou me protegendo contra os dias de folga quando digo: " share? Deve ser um diretório de lixo eletrônico!" rm -rfDoh!
jpaugh
31

Se você deseja usar find, esta seria a maneira mais rápida:

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

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

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

jlliagre
fonte
Você também pode usar a -nameopção com find.
sleepyweasel
O @sleepyweasel -namenão pesquisará dentro dos arquivos, apenas pesquisará os nomes dos arquivos, que não é o que o OP solicita.
precisa saber é o seguinte
6

Use o ggrep, se estiver instalado.

Por exemplo, pesquise "mysearchstring" do diretório atual até todos os subdiretórios ( -R) e mostre o nome e o caminho do arquivo para correspondências ( -H) e ignore os arquivos binários ( -I). Não se esqueça *do 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 que você possa chamá-lo diretamente da linha de comando.

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

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

Underverse
fonte
11
Pelo menos no meu sistema, ggrepé de fato o GNU grep. Obrigado!
jpaugh
3

Faça o download do ackscript perl independente em http://betterthangrep.com/ , coloque-o no seu $HOME/bine aprenda a usá-lo. Acho que é, como anunciado, melhor do que o grep para muitos usos no meu trabalho diário de desenvolvimento.

alanc
fonte
3

O Solaris grep não tem -ropção.

Você pode usar o seguinte comando.

find . -type f | xargs grep 'sometext'
Sachin Divekar
fonte
2
Você não precisa de "controle sobre o sistema" para compilar o GNU grep e instalá-lo em algum lugar no seu diretório pessoal.
Keith Thompson.
@KeithThompson obrigado por apontar. Eu corrigi minha resposta.
Sachin Divekar
Isso é muito útil para encontrar todos os arquivos correspondentes a um padrão de nome e mostrar resultados com o arquivo. por exemplo find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse
1

Sim, você precisará do GNU grep. Pessoalmente eu não perca a bandeira "-r" porque você pode fazer o mesmo com uma combinação de finde grepmas lembra que ter as ferramentas GNU disponíveis na sua caixa de Solaris é o que eu considero a melhor prática. Aqui vamos nos:

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

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

Se você usa o Solaris 11, a vida é muito mais simples. As ferramentas GNU são normalmente instaladas por padrão, mas nem todas são propagadas para zonas locais. O IFS, o sistema de empacotamento no Solaris 11, facilita muito a sua vida, então você realmente deve mudar para o Solaris 11 (muitos outros motivos também). A lista de pacotes que você deve considerar sempre disponíveis para qualquer zona é:

pkg: // solaris / arquivador / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / de diagnóstico / top
pkg: // solaris / arquivo / gnu-coreutils
pkg: // solaris / arquivo / 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, poderá 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 o acima (potencialmente menos as ferramentas de desenvolvimento) parte da instalação padrão da minha empresa para novos servidores / zonas. Os administradores de sistema Solaris geralmente insistem em ser diferentes do mundo Linux, mas não há realmente nenhuma necessidade. Faça isso e faça parte da sua instalação padrão. Você não vai se arrepender.

peterh
fonte
Não sei se você leu a parte em que eu disse 'dado que não tenho controle sobre a máquina ...' Tenho certeza de que essa é uma informação útil para alguém, mas dificilmente é uma resposta à pergunta que fiz. .
Eric Wilson
São informações para o seu administrador de sistemas. Ele lhe deu uma máquina IMHO aleijada. Essas coisas devem ser instaladas por padrão. Mas sim, você está certo, as informações talvez tenham o mesmo objetivo de outras pessoas que vêm a este lugar e leem sua pergunta. Hoje você está com saudades do GNU grep, amanhã com o tar do GNU, etc. Você ainda não o conhece. :-)
peterh