Como faço para usar o grep para encontrar uma string de texto em arquivos em subpastas de uma pasta pai sem a opção -r

Como faço para usar o grep para encontrar uma string de texto em arquivos em subpastas de uma pasta pai sem a opção -r

Estou usando o Solaris 10 e tenho duas grepversões, uma em /usr/bine outra em /usr/xpg4/bin. Tenho procurado uma resposta sobre como pesquisar texto em arquivos em subpastas de um diretório pai usando grep. Todas as respostas falam sobre -ropções -Rque não tenho disponíveis na minha versão do grep.

Responder1

A sintaxe padrão (POSIX) é:

find /path/to/parent -type f -exec grep 'XXX' /dev/null {} +

( /dev/nullé para garantir que grepsempre imprima um nome de arquivo). Isso funcionará em todos os sistemas POSIX, incluindo Solaris. Os únicos sistemas pós-anos 90 conhecidos onde isso não funciona são os sistemas GNU antigos (muito antigos agora).

O GNU inicialmente introduziu um -print0predicado e uma -0opção xargspara isso:

find /path/to/parent -type f -print0 | xargs -0 grep 'XXX' /dev/null

Existem agora algumas outras implementações que suportam isso, mas não o Solaris.

Acima, em teoria, você gostaria de adicionar -ruma opção para evitar a execução grepse não houver arquivo, mas isso não é tãoportátile neste caso específico, não faz diferença funcional

Responder2

Usando GNU grep(se instalado):

ggrep -A3 -B23 'word' -R /log/

Isso verificará todos os arquivos da pasta se a expressão regular wordcorresponde e mostrará a saída junto com o caminho do arquivo.

GNU grepsuporta a -Rbandeira.

Responder3

Basta usar o ggrep que no solaris existe em /usr/sfw/bin/ggrepum caminho como este:
/usr/sfw/bin/ggrep -H 'search-term' <file-name>*
ele pesquisa seu termo de pesquisa em um grupo de nomes de arquivos começando com uma palavra específica.

informação relacionada