Buscando texto dentro de arquivos no Linux

Um recurso legal de ter à disposição, principalmente a programadores, é a busca em conteúdo de arquivos. Normalmente temos isto no gerenciador de arquivos, porém se quisermos fazer “na mão”, talvez até gerar uma automação usando ShellScript, uma solução é usar o comando grep.

Sintaxe:

grep -R [string buscada] [diretório base]
* -R define a recursividade da busca, ou seja, a busca irá partir do diretório base e seguir para seus subdiretórios também.
 

Exemplos:

grep -R  "Meu Texto" ./
grep -R  "texto procurado" "/home/A Minha Pasta"

Lapidando:

O resultado da busca será cada ocorrência do texto em cada arquivo encontrado, o que poderá gerar um pouco de repeteco. Podemos melhorar isto com uma abordagem que achei em um fórum, que é o recorte da saída de cada ocorrência, a fim de captar somente o nome do arquivo onde o texto está, e então fazer um agrupamento. Segue o comando:

grep -R  "Meu Texto" /home/blablabla/ | cut -d: -f1 | uniq
* Neste caso, o “cut” será do início do texto até o sinal de “:” (definido por “-d:“) e a primeira parte do texto (definida por -f1) será agrupada por uniq.

 

Post com a dica do “cut”:
http://www.vivaolinux.com.br/dica/Localizar-arquivo-contendo-texto-especificado-no-Linux

Esta entrada foi publicada em Linux e marcada com a tag , , , . Adicione o link permanente aos seus favoritos.
  • Cesar Azevedo

    Só pra deixar uma outra opção:
    find ./* -type f -exec grep -l palavra {} ;

  • Cesar Azevedo

    Montei o script abaixo para buscar palavras-chaves(kw) em nomes de arquivos, diretórios e dentro de arquivos a partir de um diretório(dir) e seus subdiretórios, lista todos exceto arquivos ocultos.

    Buscar a palavra “cesar” em nomes de arquivos, diretório e dentro de arquivos, a partir do diretório “/home”:
    dir=”/home”; kw=”cesar”; find $dir -name $kw*; grep -iR $kw $dir | grep -v “/./*”;

    Buscar a palavra “cesar” em nomes de arquivos, diretório e dentro de arquivos, a partir do diretório atual
    dir=””; kw=”cesar”; find $dir -name $kw*; grep -iR $kw $dir | grep -v “/./*”;

    Testado no Ubuntu Server