Ir para o conteúdo.

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

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. :)

TB Respostas
Publicidade

28 Comentários (Deixe o seu!)

  • 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.

    • bawlaw
      993c

      util e muito mais simples!

  • Bruno Vane
    30c

    É sério?

  • Yangm
    5263c

    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?

    • 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
        5263c

        Vish, deu medo! Vou passar a fazer backup antes de editar agora…

    • 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/

      • Yangm
        5263c

        Os tutorias são do Macromedia Dreamweaver 8, atualmente uso o que vem na CS5 da Adobe. Mas são bem úteis.

  • Ja conhecia o comando, mas creio que pode ser util pra mais gente. Thumbs up pro TB.

  • Julio

    OMG! A roda!

    • Ninguém precisa nascer sabendo, não é?

    • Ninguém precisa nascer sabendo, não é colega?

      • Yangm
        5263c

        Eu acho que ele não quis dizer isso.

  • 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.

    • Victor

      Agora faça isso com um pequeno trecho que você quer buscar em 500000000 arquivos…..

  • Quando você descobrir o SED e AWK então! Vai ter um orgasmo com as infitas possibilidades.

    • Calma, amigo. Não podemos entregar TUDO pros leitores numa porrada só. :)

  • Gustavo

    Pra procurar coisa dentro de arquivo é melhor usar Vim né?
    além do que da pra fazer várias coisas :P

  • Francklin

    Caraca! Parabéns Paulo, realmente está de parabéns!
    Esse comando é muito bom pra mim, que sou usuário “comum”.

  • gokernel
    357c

    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.

  • É 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!

  • 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

  • gokernel
    357c

    Só testando estando logado.

    Administrador, por gentileza apagar este me post se for publicado.

    Grato.

    Gokernel.

  • 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!

  • 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…

  • Ótimo artigo!!!

  • Déborah

    E viva as expressões regulares! ;D

  • 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

Deixar comentário:

Leia | Política de Comentários.