Uma maneira melhor de procurar por uma string dentro de um arquivo?

0

Eu estou tentando encontrar uma determinada seqüência de texto em um arquivo em algum lugar no meu disco rígido. O melhor que eu tenho até agora é:

find -type f / | xargs cat | grep "string to find"

Mas isso apenas me diz se a string existe em algum lugar ou não.

Como posso saber em qual arquivo eu o encontrei?

Existe uma maneira melhor?

    
por eleven81 06.11.2009 / 19:44

6 respostas

4
find / -type f -exec grep "string" {} +

Isso fará uma pesquisa sem distinção entre maiúsculas e minúsculas, que será mais lenta, mas mais flexível:

find / -type f -exec grep -i "string" {} +

você pode obter muitos resultados para que possa canalizar para menos, então use f e b para navegar para frente e para trás página por página através da saída:

find / -type f -exec grep -i "string" {} + | less

Se você souber que está procurando por *.txt arquivos, poderá refinar ainda mais:

find / -type f -name "*.txt" -exec grep -i "string" {} + | less
    
por 06.11.2009 / 19:51
5

Isso deve funcionar e é muito mais simples:

grep -R "some string" /

adicionar -n mostrará os números de linha que você precisa:

grep -Rn "some string" /
    
por 06.11.2009 / 20:02
4

Por que usar "cat" nesse caso? Eu sempre acho estranho como as pessoas usam 'gato' sem motivo algum. Apenas faça:

find -type f / | xargs grep "string to find"

É claro que pesquisar todos os arquivos no seu disco inteiro será bem lento. Provavelmente, é melhor usar algum tipo de programa de indexação se precisar pesquisar com frequência dessa maneira. Por exemplo, o Beagle é um mecanismo de pesquisa bastante extenso, já existe há algum tempo. Outras opções são O Strigi do KDE ou Pesquisa na área de trabalho do Google

No mínimo, você deve usar 'locate' em vez de 'find', ele indexa apenas nomes de arquivos e não seus conteúdos, mas isso ainda acelerará as coisas. Além disso, você deve filtrar com base no tipo de arquivo antes de usar o grep. Por exemplo, usar o grep em um arquivo avi de 100MB ou algo é apenas uma perda de tempo.

    
por 07.11.2009 / 00:53
2

e:

grep -r -H -i 'string' .
    
por 06.11.2009 / 20:00
2

How can I know what file I have found it in?

Você precisa usar a opção ' -H ' com ' grep ' para imprimir o arquivo correspondente.

Além disso,

  • Também seria uma boa ideia usar um palpite um pouco melhor do que a raiz (' / ').
  • O esquema de John da opção -exec sobre o operador ' | ' ajudará quando você tiver muitos arquivos sendo pesquisados
por 06.11.2009 / 20:02
1

Sim, grep com o sinalizador -r fará uma pesquisa recursiva. Tente um comando como:

grep -ri 'hello' .

O qual procurará o diretório atual, e todos os arquivos e diretórios dentro dele, pela frase 'olá'. O sinalizador -i torna-o independente de maiúsculas e minúsculas, por isso também encontrará "Olá", "HELLO", etc.

    
por 07.11.2009 / 02:03