Procure uma string recursivamente enquanto estiver no diretório atual

15

Quero pesquisar todos os arquivos recursivamente no diretório em que estou para uma determinada string.

eu tentei

grep -r -i my_string

e tentei em uma pasta de teste com dois arquivos minúsculos, mas não encontrou a sequência.

Além disso, existe alguma maneira especial de definir "contém" em vez de corresponder à palavra inteira?

David
fonte
3
Tente grep -r -o -i "your_string" *(com "aspas)."
pl1nk
estou recebendo algumas mensagens de permissão negada, ele simplesmente ignora esses arquivos, mas continua verificando o restante?
David
Certo, esses arquivos estão sendo ignorados.
pl1nk

Respostas:

26

Você está procurando um nome de arquivo ou uma palavra dentro de um arquivo? O grep pesquisa dentro dos arquivos, o que parece ser o que você deseja.

O grep usa expressões regulares - na verdade, é isso que a parte "re" representa. Portanto, ele não usa os curingas normais do bash; isto é, abc*não encontraria palavras que começassem com abc, encontraria palavras que começassem com ab, depois zero ou mais c's a seguir. Mas sim, se você simplesmente der um padrão, ele o encontrará em qualquer lugar, sem o conhecimento de palavras inteiras. Se você quisesse encontrar palavras inteiras, seria necessário criar uma expressão regular para dizer isso.

Mas, como a maioria dos comandos, você precisa colocar o (s) nome (s) do (s) nome (s) no final do comando, para que seu exemplo fique lá e aguarde o nome do arquivo.

Como o @plink disse, use

grep -r -o -i "your_string" *

(ou *.*outro tipo de arquivo). Os erros podem ser ignorados. Se você estiver recebendo muitos erros, poderá anexar 2>/dev/nullao final, que redirecionará o stderr para um dispositivo nulo.

Marty Fried
fonte
6
Para os curiosos: -r significa recursivo (ou seja, procura na pasta atual e TODAS as pastas na pasta atual E todas as pastas nessa pasta ..... até o infinito), -o significa que não mostra toda a linha, e -i é ignorar maiúsculas e minúsculas.
BKSpurgeon
@johnsnails O backtick não é necessário. É mais provável que haja um erro de formatação no Stack Exchange ao postar como bloco de código embutido.
tom_mai78101
Sim, isso faz sentido.
johnsnails