Como Encontrar uma Palavra Específica em um Arquivo no Linux

Por padrão, a maioria das ferramentas de busca observa os nomes dos arquivos, e não o conteúdo dos arquivos. No entanto, o programa de busca GNU mais famoso, grep, irá olhar dentro dos arquivos com os sinalizadores corretos. Aqui mostramos como você pode encontrar palavra(s) específica(s) em um arquivo no Linux.
Índice
- Usando grep para Encontrar uma Palavra Específica em um Arquivo
- Usando find para Encontrar uma Palavra Específica em um Arquivo
- Usando ack para Encontrar uma Palavra Específica em um Arquivo
- Quer uma GUI? Use Catfish
- Perguntas Frequentes
Leia também: Como Encontrar Arquivos Grandes no Linux
Usando grep para Encontrar uma Palavra Específica em um Arquivo
Por padrão, o grep pesquisa através do conteúdo dos arquivos, bem como seus nomes. Ele está incluído na maioria dos sistemas Linux e é geralmente idêntico entre as distribuições. Programadores que estão analisando o conteúdo dos arquivos de seus projetos podem preferir executar um comando diferente, como ack.
Dependendo de como o arquivo está codificado, o grep pode não conseguir olhar dentro dele. Mas para a maioria dos formatos baseados em texto, o grep pode escanear o texto do arquivo em busca do padrão especificado.
grep -rw '/caminho/para/buscar/' -e 'padrão'- O sinalizador
-rdefine o grep para o modo recursivo, navegando por todos os diretórios contidos dentro do diretório especificado. - O sinalizador
-wbusca por correspondências de palavras inteiras. Isso significa que “vermelho” irá corresponder apenas à palavra real “vermelho” e não a qualquer sequência de letras que a contenha, como “ vermelho undante” ou “ti vermelho.” Isso é feito procurando apenas por “vermelho” cercado por caracteres conhecidos como constituentes não-alfanuméricos (ou seja, qualquer coisa que não seja uma letra, número ou sublinhado). - O sinalizador
-eprecede o padrão a ser buscado. Ele suporta expressões regulares por padrão.
Para acelerar o grep, você pode usar os sinais --exclude e --include para limitar a pesquisa a certos tipos de arquivos. Por exemplo, --exclude='*.csv' não irá buscar dentro de quaisquer arquivos com a extensão .csv. --include='*.txt', por outro lado, irá buscar apenas dentro de arquivos com a extensão .txt. O sinalizador pode ser adicionado imediatamente após o comando grep como mostrado abaixo:
grep --exclude='*.csv' -Rw '/caminho/para/buscar' -e 'padrão'Você também pode excluir diretórios especificados seguindo o formato abaixo:
grep --exclude-dir='{dir1,dir2,*_old}' -Rw '/caminho/para/buscar' -e 'padrão'Este comando não irá buscar em nenhum dos diretórios no diretório de trabalho atual chamados dir1, dir2, ou que correspondam ao padrão *_old, eliminando-os do processo de busca. Ele irá executar a busca recursiva e de correspondência de palavra completa especificada em todos os outros arquivos no diretório de trabalho atual.
Sinalizadores Interessantes Que Você Pode Usar Com grep
Agora que você está devidamente apresentado ao grep e como ele funciona, aqui estão alguns sinais úteis que você pode anexar ao seu comando:
-i– Faz o grep realizar uma busca sem diferenciar maiúsculas e minúsculas. Por exemplo, buscar por “Kraken” retornará um resultado quando o grep encontrar correspondências para “kraken” ou “kRaken”.-n– Mostra números de linha ao lado das correspondências. Isso é especialmente útil para programadores ou pessoas analisando grandes arquivos de configuração.-R– Assim como o-r, o grep fará uma busca recursiva através de todas as subpastas, mas esse sinalizador específico seguirá links simbólicos (atalhos).-s– Suprime mensagens de erro. Se você está recebendo muitas mensagens de erro distrativas sobre arquivos que não existem, não podem ser lidos ou têm permissões inadequadas, passe isso para que o grep possa se concentrar em mostrar apenas as correspondências que encontra.
Leia também: Como Encontrar um Arquivo no Linux Usando o Comando Find
Usando find para Encontrar uma Palavra Específica em um Arquivo
Embora a sintaxe do comando find seja mais complicada que a do grep, alguns a preferem.
find . -name "*.php" -exec grep "padrão" {} ;Este comando usará o sinalizador -exec do find para passar os arquivos encontrados para o grep. Com uma organização inteligente da sintaxe, você pode usar a pesquisa de sistema de arquivos mais rápida do find para localizar os tipos de arquivo específicos que deseja pesquisar, e então pipar para o grep para pesquisar dentro dos arquivos.
Note que find só observa os nomes dos arquivos, não os conteúdos. É por isso que o grep é necessário para pesquisar o texto e o conteúdo do arquivo. Os sinalizadores normais do grep devem funcionar plenamente a partir do sinalizador -exec.
Usando ack para Encontrar uma Palavra Específica em um Arquivo
O comando ack é provavelmente a ferramenta de busca mais rápida, mas não é tão popular quanto o grep. O comando abaixo irá buscar dentro do diretório atual.
ack 'padrão'Se você quiser buscar dentro de um arquivo ou diretório específico, pode anexar esse arquivo ou caminho totalmente qualificado à sua busca.
ack 'padrão' /caminho/para/arquivo.txtLeia também: Como Instalar e Gerenciar Versões do Python no Linux
Quer uma GUI? Use Catfish
Se você é alérgico a terminais, todas as distribuições Linux populares oferecem o Catfish, uma aplicação GUI versátil que permite que você busque arquivos e seus conteúdos por uma string específica. Não é tão avançado quanto os comandos discutidos aqui, mas fornece um serviço valioso para pessoas que preferem uma interface gráfica.

Para buscar conteúdos de arquivos por uma palavra específica, clique no menu no canto superior direito do Catfish e clique em “Buscar conteúdos de arquivos.”
Depois de configurá-lo, digite o que você deseja buscar na barra superior e pressione Enter. É isso!
Leia também: As Diferenças entre Su, Sudo Su, Sudo -s e Sudo -i
Perguntas Frequentes
Como eu paro uma busca do grep antes de terminar?
Para parar qualquer processo em andamento no seu terminal, simplesmente pressione Ctrl + C no seu teclado. Isso envia um sinal para terminar o processo em execução. É também por isso que você não pode usar atalhos normais de copiar/colar dentro de um emulador de terminal.
Existem gerenciadores de arquivos que buscam conteúdos de arquivos?
Se você usa o ambiente de desktop KDE Plasma, seu gerenciador de arquivos padrão (Dolphin) já possui essa capacidade. Quando você clica no botão de busca para procurar arquivos, há uma opção para escolher entre nomes de arquivos e conteúdo de arquivos abaixo da barra de busca.
Basta clicar em “Conteúdo” se você quiser buscar palavras dentro dos arquivos. Não será tão avançado quanto usar o grep, mas cumpre a função.
Existem outros usos para o grep?
O grep não é apenas para pesquisar no seu sistema de arquivos! Curiosamente, você pode pipá-lo através de quase qualquer comando para pesquisar sua saída em vez de ter que encontrar algo manualmente.
O grep pode ser usado para filtrar a saída de comandos para mostrar coisas que são mais relevantes para você. Experimente o suficiente com isso e você eventualmente dominará a arte de diagnosticar e conhecer seu computador!
Todas as capturas de tela por Miguel Leiva-Gomez.