Como encontrar uma palavra específica em um arquivo no Linux
Por padrão, a maioria das ferramentas de pesquisa analisa os nomes dos arquivos, não o conteúdo dos arquivos. No entanto, o programa de busca GNU mais famoso, grep
, irá procurar dentro dos arquivos com os sinalizadores corretos. Aqui mostramos como você pode encontrar palavras específicas em um arquivo no Linux.
Contente
- 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 bagre
- 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, grep pesquisa o conteúdo dos arquivos, bem como seus nomes de arquivos. Ele está incluído na maioria dos sistemas Linux e geralmente é idêntico em todas as distros. Os programadores que procuram o conteúdo dos arquivos de seus projetos podem preferir executar um comando diferente, como ack
.
Dependendo de como o arquivo está codificado, grep
nem sempre será capaz de olhar para dentro. Mas para a maioria dos formatos baseados em texto, grep
pode verificar o texto do arquivo em busca do padrão especificado.
grep -rw '/path/to/search/' -e 'pattern'
- O sinalizador
-r
define grep para o modo recursivo, navegando por todos os diretórios contidos no diretório especificado. - O sinalizador
-w
procura correspondências de palavras inteiras. Isso significa que "vermelho" corresponderá apenas à palavra "vermelho" em vez de qualquer sequência de letras que a contenha, como "vermelhoundant" ou "tivermelho". Ele faz isso procurando apenas por "vermelho" cercado pelo que é conhecido como caracteres constituintes que não são palavras (ou seja, qualquer coisa que não seja uma letra, número ou sublinhado). - O sinalizador
-e
precede o padrão a ser pesquisado. Suporta expressões regulares por padrão.
Para acelerar o grep, você pode usar os sinalizadores --exclude
e --include
para limitar a pesquisa a certos tipos de arquivos. Por exemplo, --exclude='*.csv'
não pesquisará em nenhum arquivo com a extensão .csv. --include='*.txt'
, por outro lado, pesquisará apenas em arquivos com extensão .txt. O sinalizador pode ser adicionado imediatamente após o comando grep conforme mostrado abaixo:
grep --exclude='*.csv' -Rw '/path/to/search' -e 'pattern'
Você também pode excluir diretórios especificados seguindo o formato abaixo:
grep --exclude-dir='{dir1,dir2,*_old}' -Rw '/path/to/search' -e 'pattern'
Este comando não pesquisará em nenhum diretório no diretório de trabalho atual denominado dir1, dir2 ou que corresponda ao padrão *_old, eliminando-os do processo de pesquisa. Ele executará a pesquisa recursiva de correspondência de palavras completas especificada em todos os outros arquivos no diretório de trabalho atual.
Sinalizadores interessantes que você pode usar com grep
Agora que você está familiarizado com o grep e como ele funciona, aqui estão alguns sinalizadores úteis que você pode anexar ao seu comando:
-i
– Faz com que o grep faça uma pesquisa sem distinção entre maiúsculas e minúsculas. Por exemplo, pesquisar por "Kraken" retornará um resultado quando o grep encontrar correspondências para "kraken" ou "kRaken".-n
– Mostra os números das linhas ao lado das correspondências. Isso é especialmente útil para programadores ou pessoas que procuram arquivos de configuração grandes.-R
– Assim como-r
, grep fará uma pesquisa recursiva em todas as subpastas, mas este sinalizador específico seguirá links simbólicos (atalhos).-s
– Suprime mensagens de erro. Se você estiver recebendo muitos erros perturbadores sobre arquivos que não existem, não podem ser lidos ou têm permissões inadequadas, passe isso para que o grep possa mostrar as correspondências que encontrar.
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 preferem-na.
find . -name "*.php" -exec grep "pattern" {} ;
Este comando usará o sinalizador -exec
do find para passar os arquivos encontrados para o grep para pesquisa. Com um arranjo inteligente de sintaxe, você pode usar a pesquisa mais rápida do sistema de arquivos do find
para localizar os tipos de arquivos específicos nos quais deseja pesquisar e, em seguida, canalizá-los para o grep
para pesquise dentro dos arquivos.
Observe que find
analisa apenas nomes de arquivos, não conteúdos. É por isso que o grep é necessário para pesquisar o texto e o conteúdo do arquivo. Os sinalizadores grep normais devem estar totalmente operacionais no 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á pesquisar no diretório atual.
ack 'pattern'
Se desejar pesquisar em um arquivo ou diretório específico, você poderá anexar esse arquivo ou nome de caminho completo à sua pesquisa.
ack 'pattern' /path/to/file.txt
Leia também: Como instalar e gerenciar versões do Python no Linux
Quer uma GUI? Use bagre
Se você é alérgico a terminais, todas as distribuições Linux populares oferecem Catfish, um aplicativo GUI versátil que permite pesquisar arquivos e seu conteúdo em busca de 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 pesquisar uma palavra específica no conteúdo do arquivo, clique no menu no canto superior direito do Catfish e clique em “Pesquisar conteúdo do arquivo”.
Depois de configurá-lo, digite o que deseja pesquisar 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 interrompo uma pesquisa grep antes de terminar?
Para interromper qualquer processo em andamento no seu terminal, basta pressionar Ctrl + C no teclado. Isso envia um sinal para encerrar o processo em execução. É também por isso que você não pode usar atalhos normais de copiar/colar em um emulador de terminal.
Existe algum gerenciador de arquivos que pesquise o conteúdo dos arquivos?
Se você usa o ambiente de área de trabalho KDE Plasma, seu gerenciador de arquivos padrão (Dolphin) já possui esse recurso. Quando você clica no botão de pesquisa para procurar arquivos, há uma opção para escolher entre nomes e conteúdo de arquivos abaixo da barra de pesquisa.
Basta clicar em “Conteúdo” se quiser pesquisar palavras dentro dos arquivos. Não será tão avançado quanto usar o grep, mas funciona.
Existem outros usos para o grep?
Grep não serve apenas para pesquisar seu sistema de arquivos! Curiosamente, você pode canalizá-lo através de quase qualquer comando para pesquisar sua saída, em vez de ter que encontrar algo manualmente.
Grep pode ser usado para filtrar a saída do comando para mostrar coisas que são mais relevantes para você. Experimente bastante e você eventualmente dominará a arte de diagnosticar e conhecer seu computador!
Todas as capturas de tela de Miguel Leiva-Gomez.