Início » Celular » grep – Encontre trechos de código no terminal do Linux

grep – Encontre trechos de código no terminal do Linux

Comando permite buscar palavras no código-fonte de vários arquivos simultaneamente.

Avatar Por

Dia desses, enquanto passava a madrugada trabalhando, percebi que uma das tarefas era encontrar um trecho de código específico em mais de 2.000 arquivos e substituir por outro trecho de código.

O problema é que não havia qualquer indicador óbvio de que o código em questão estaria em qualquer um desses arquivos. Ou seja: eu provavelmente teria que baixar todos para minha máquina via FTP e abri-los para encontrar quais arquivos continham esse bendito trecho. Foi aí que eu me lembrei de um comando simples no Linux que pode ser executado no terminal e é uma mão na roda não só para usuários avançados, mas para qualquer um: o grep!

O grep é um comando com uma função simples: ele procura por trechos de texto (strings) dentro de arquivos ou diretórios e retorna para você em quais arquivos a string foi encontrada, inclusive mostrando a linha em que isso ocorreu. Parece bobo? Pense novamente: as possibilidades com o grep são quase infinitas, mesmo para usuários comuns, e o uso aumenta muito mais quando você resolve uní-lo a outros comandos.

Imagine por exemplo que você queira descobrir rapidamente quais foram os últimos acessos de um número IP específico ao servidor. Em vez de abrir o arquivo de log ou usar uma ferramenta, você pode usar o grep no último arquivo de log de acessos. Pronto, ele te retorna na tela os dados.

Ou digamos que você não seja exatamente um usuário muito organizado e agora precisa encontrar onde está uma informação importante dentro de um documento perdido em meio a centenas de outros documentos. Use o grep.

Ou, por fim, imagine que você seja um sysadmin que precisa urgentemente dormir pelo menos uma hora que seja e tem quase 2000 arquivos para verificar a existência de um possível trecho de código. Use o grep, e vá dormir mais cedo. 🙂

E como o grep funciona? No terminal, você pode digitar, por exemplo:

grep "trecho a procurar" arquivo.txt

Ou seja: primeiro o comando grep, logo depois o trecho que você quer encontrar, e por fim o arquivo onde você fará a busca. Embora não seja obrigatório colocar o trecho de busca entre aspas, o ideal é fazer isso sempre, para que o Linux não acabe se confundindo com a sintaxe do comando.

Mas... E se eu quiser procurar em vários arquivos, e não apenas em UM arquivos específico? Não tema, continua simples:

grep "trecho a procurar" *

Com isso, o grep vai procurar o trecho em todos os arquivos do diretório atual. Se você quiser, pode especificar um diretório diferente:

grep "trecho a procurar" /var/www/*

Está ficando divertido, mas você ainda pode melhorar, com o uso de algumas opções de busca. Vamos dizer que você não queira fazer a busca apenas naquele diretório, mas também nos subdiretórios. Use a opção -R.

grep -R "trecho a procurar" /var/www/

Ele vai procurar o trecho em todos os arquivos e diretórios que estejam dentro de /var/www/. Perceba que, dependendo da quantidade de arquivos e do tamanho deles, isso pode levar alguns minutos ou várias horas. Então use essa opção com cuidado. Se você quiser, pode fazer uma busca que não se importe com maiúsculas ou minúsculas usando a opção -i:

grep -i "trecho a procurar" arquivo.txt

Aqui, o grep vai retornar qualquer resultado que bater com o trecho desejado, independente se houverem maiúsculas. Pode ser "Trecho A Procurar" ou "TrReChO a PrOcUrAr" ou qualquer outra combinação. Não fará diferença. Mas você também pode procurar por todos os arquivos ou linhas onde o trecho não aparece. Como? Usando a opção -v

grep -v "trecho a procurar" arquivo.txt

Nesse exemplo, o grep vai retornar qualquer linha do arquivo que não contenha o texto selecionado. Interessante, não? E dá para juntar todas essas opções? Claro que dá!

grep -Riv "trecho a procurar" /var/www/

Já ficou fácil de entender o que essa combinação faz, não? Procura recursivamente dentro da pasta /var/www por todos os arquivos e linhas onde o trecho selecionado não foi encontrado, independente dele ter partes em maiúsculas ou minúsculas.

Podemos melhorar? Podemos. E se o trecho que quisermos procurar existir em muitos arquivos e acabar "estourando" o limite de caracteres do terminal? Ou, melhor: e se quisermos passar o resultado para outra pessoa? É só jogar a saída do grep para um arquivo:

grep "trecho" arquivo.txt > arquivodesaida.txt

Todo o resultado do grep irá para o arquivodesaida.txt, e não para a tela. Assim, você poderá ler com calma, imprimir, enviar para alguém, ou até usar em algum outro script. Outra possibilidade é usar o grep para filtrar a saída de outros comandos. Vamos dizer que eu precise listar a saída do comando ls (muito útil se você está procurando algo específico em uma pasta com muitos arquivos):

ls | grep trecho

E pronto. O ls vai retornar apenas os arquivos que contenham "trecho" no nome. Mais fácil que isso, só se o estagiário fizer pra você! 🙂

O grep é uma ferramente poderosa, e aqui cobrimos apenas o básico dela. Se você quiser saber mais, leia o manual do comando, e brinque um pouco na sua instalação Linux. Você vai descobrir possibilidades que tornarão sua vida muito mais fácil. 🙂

Mais sobre: ,

Comentários

Envie uma pergunta

Os mais notáveis

Comentários com a maior pontuação

Fernando de Sousa
Melhor explicação é difícil, ficou excelente.
Tales Breno
Exatamente o que estava procurando, muito bom. Obrigado!
Tales Breno
Acho que é possível com cUrl
Vinicius Azevedo
Olá, preciso acessar uma determinada URL e pegar os dados de uma inteira, isso é possível?
Tulio Santos
Valeu, esclareceu bastante.
Yuri da Silva
gedit e Mousepad suportam isso também.
Mauricio Leite
tente com 'sed'
Priscila Felippe Peres Andrade
Tem como substituir os trechos de uma só vez? Assim como Crtl+H (localizar e subistituir)
Edinaldo S. Carvalho
ficou legal, show de bola
Forbidden_404
Tutorial do ano passado, mas bem legal. Eu normalmente uso junto com cat, principalmente pra ver o log do boot e procurar por algum erro na instalação
Déborah
E viva as expressões regulares! ;D
Penélope
Ótimo artigo!!!
Micael Silva
Dia desses usei o grep para exportar marcadores de um projeto no Final Cut Pro para o codificador do Windows Media no PC. Benefícios do padrão XML que a Apple matou no FCP X...
@matheusortiz
Conhecia o comando e de fato é muito útil. Para Windows temos ferramenta semelhante, não tão poderosa, mas bem bacana: http://www.wingrep.com/ Fica a dica...abraço!
gokernel
Só testando estando logado. Administrador, por gentileza apagar este me post se for publicado. Grato. Gokernel.
@sr_aulian
Eu uso o grep toda hora nos meus projetos da faculdade, nao dá pra ficar procurando manualmente no meio de milhões de linhas de codigo
@ric_bnu
É um excelente comando.. utilizo-o diariamento no meu trabalho. Um opção para verificar também arquivos compactados (.gz , .z) seria utilizar o zgrep. Abraço!
gokernel
Muito útil o artigo para o usuário Linux/windows. O grep está entre os meus essenciais no windows(cygwin), pois utilizo esse como um utilitário do OS no windows ... Aliás no win segue o mesmo modelo/organização dos arquivos do linux( \usr\bin , \usr\lib ). Lembrando também que o grep pode ser utilizado com saida de stream, exemplo: ---------------------- set | grep "texto" ---------------------- Gokernel.
Francklin
Caraca! Parabéns Paulo, realmente está de parabéns! Esse comando é muito bom pra mim, que sou usuário "comum".
Gustavo
Pra procurar coisa dentro de arquivo é melhor usar Vim né? além do que da pra fazer várias coisas :P
bawlaw
util e muito mais simples!
Yangm
Eu acho que ele não quis dizer isso.
Victor
Agora faça isso com um pequeno trecho que você quer buscar em 500000000 arquivos.....
Paulo Graveheart
Calma, amigo. Não podemos entregar TUDO pros leitores numa porrada só. :)
Yangm
Os tutorias são do Macromedia Dreamweaver 8, atualmente uso o que vem na CS5 da Adobe. Mas são bem úteis.
Yangm
Vish, deu medo! Vou passar a fazer backup antes de editar agora...
@andrelinod
Ninguém precisa nascer sabendo, não é colega?
@andrelinod
Ninguém precisa nascer sabendo, não é?
Victor
Rode o dreamwever no Linux com o WinE : http://www.vivaolinux.com.br/dica/Dreamweaver-no-Linux http://imasters.com.br/artigo/7490/dreamweaver/dreamweaver_8_em_linux_com_wine/
@margofi
Quando você descobrir o SED e AWK então! Vai ter um orgasmo com as infitas possibilidades.
@willtnt
Muito bom o artigo, serve de referência. No Windows, eu uso a busca em arquivo do Notepad++. Para usar é só abrir o Notepad++, apertar Ctrl+F, clicar na aba Localizar em arquivos, digitar o termo, escolher a pasta e esperar o resultado aparecer na parte inferior da janela.
Julio
OMG! A roda!
@_eliasalberto
Ja conhecia o comando, mas creio que pode ser util pra mais gente. Thumbs up pro TB.
Paulo Graveheart
Sim, mas eu sou paranóico e não gosto de fazer isso. Um -R a mais ou um espaço a menos e você destrói muita coisa no seu sistema... :P
Yangm
Agora não sei se programo em html com o DreamViewer no Windows ou no Ubuntu com esses ótimos comandos. Mesmo assim muito obrigado. PS: Existe a possibilidade de substituir o trecho encontrado?
Bruno Vane
É sério?
@willtnt
Muito bom o artigo, quando eu trabalhava em Linux, utilizava o grep. Mas hoje trabalho no windows e utilizo a busca em arquivos do Notepad++. Para usar, abra o Notepad++ e aperte Ctrl+F para abrir a caixa de pesquisa e depois clique em Localizar em arquivos, dai é só colocar o termo, escolher a pasta e esperar que o resultado aparece na parte inferior da janela. Essa busca não é tão poderosa quanto o grep, mas ajuda muito para os usuários do Windows.