grep -r não está funcionando no Solaris

3

Como faço grep recursivo no Solaris?

Quando tentei, recebi este erro:

-r: invalid option.
    
por Vikash Jindal 29.04.2011 / 21:52

5 respostas

7

Grep recursivo no Solaris:

find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
    
por 29.04.2011 / 21:54
2

find . | xargs grep whatsyrexpression ou use cpan para instalar o comando ack .

    
por 29.04.2011 / 21:54
1
A opção

-r para o grep funciona apenas com o gnu grep. Soluções com xargs são boas, mas causam alguns problemas - ache | xargs grep quebrará em nomes de arquivos com espaços, e além disso - xargs também é uma ferramenta gnu, então pode não estar instalada.

Até onde eu sei, a maneira correta de fazer isso em solaris é:

find . -type f -exec grep ... {} +
  • no final significa que haverá muitos arquivos passados para todas as chamadas do grep, então será relativamente rápido.

Além disso, observe que o solaris (well, unix) grep não tem (por exemplo) a opção -E, e você deve usar egrep para ele.

    
por 30.04.2011 / 14:48
1

Se você tiver sorte, você tem o gnu grep instalado também. Será então nomeado " ggrep ".

Geralmente, o ggrep está localizado em /usr/sfw/bin/ggrep , se estiver instalado. Use os -H -R -I flags: -H para mostrar o nome do arquivo, -R para pesquisa recursiva, -I para ignorar arquivos binários.

Exemplo: Mostrar todas as linhas em todos os arquivos, exceto arquivos binários, a partir desse diretório, incluindo todos os subdiretórios com a palavra "excel"

/usr/sfw/bin/ggrep -H -R -I "excel" *
    
por 29.04.2011 / 22:14
0
find . -type f -exec grep hello {} /dev/null \;

Isso também funcionará para nomes de arquivos com espaços. Por que / dev / null? Porque cada instância do grep inspecionará um único arquivo por vez e, portanto, não imprimirá o nome do arquivo se encontrar uma correspondência. Tudo bem se você está realmente usando apenas um arquivo, mas não ajuda se o grep for repetidamente chamado de find. O arquivo / dev / null adicional serve como um arquivo extra fictício para procurar, de modo que o grep prefixará o nome do arquivo atual quando ele imprimir a linha correspondente.

    
por 29.04.2011 / 22:28