Comando grep no Linux

O comando grep

O comando grep pode ser visto como uma forma simplificada de consulta a um banco de dados em texto puro, em que cada linha representa um registro. Pode ser usado para retirar um conjunto de strings (cadeias de caracteres) do resultado de um comando dado ou de um arquivo texto, por mais longo que seja. Os exemplos que vou dar aqui falarão por si.

LEIA MAIS:

Exemplo básico de uso do comando grep

Para pedir uma lista dos processos em execução na máquina, podemos usar o comando ps aux. Mas a lista pode ser muito extensa e você só quer saber (por exemplo) do que diz respeito ao NetworkManager:

ps aux | grep -i net

Observe que ele exibe e destaca todas as strings contendo a cadeia de caracteres “net”.
Captura de tela de 2013-02-22 13:42:27
O comando ps aux exibe todos os processos em execução. O operador | redireciona os resultados do comando ps pro comando grep, que filtra as ocorrências de “net” do resultado. O parâmetro -i, pede ao comando que ignore se as letras estão em maiúsculas/minúsculas.

Use grep para filtrar resultados de arquivos de log do sistema

Certos arquivos de log do sistema são muito extensos e podem conter uma quantidade imensurável de informações irrelevantes pra sua situação. O comando grep pode ajudar a encontrar “uma agulha no palheiro”.
Vejamos, como exemplo o arquivo de log /var/log/dmesg que contém informações atuais do que está ocorrendo no seu sistema. Vamos visualizar o seu conteúdo – mas vamos deixar de fora tudo o que não se refere à nossa interface de rede eth0:

cat /var/log/dmesg | grep eth0

Captura de tela de 2013-02-22 14:09:19

Como usar o egrep para filtrar resultados com operadores lógicos

Outros comandos, como lshw também retornam uma lista muito extensa e, como é o caso deste, podem demorar muito para finalizar a sua execução. O interessante, aqui, é direcionar o resultado do comando para um arquivo texto, que será usado com muito mais facilidade.
Com o seguinte comando, você cria o arquivo lshw.log contendo o resultado do comando lshw

sudo lshw > lshw.log

Note que o executamos com privilégios administrativos (sudo), conforme recomenda o manual do comando. Mas ele também funciona sem isso.
A seguir vamos usar uma versão diferente do grep, o egrep para filtrar os resultados que se referem às nossas interfaces de rede eth0 e wlan0:

egrep -C 2 -i '(eth|wlan)0' lshw.log

Explicando o comando:

  • -C 2 – inclui as 2 linhas acima e as 2 linhas abaixo daquela em que foi encontrada a string desejada. Assim você sabe em que contexto o resultado está inserido.
  • -i – desativa a sensibilidade às ‘caixas’, ou seja, tanto faz se os caracteres estiverem em minúsculas ou maiúsculas.
  • Operador lógico | – Desde que a string termine com ‘0’, tanto faz que seja ‘eth0’ ou ‘wlan0’. Assim, eu incluo os resultados referentes à interface de rede a cabo e wireless.Captura de tela de 2013-02-22 14:34:04
    LEIA MAIS:

    Como encontrar arquivos com o comando grep

    Você pode usar o comando grep para encontrar arquivos de texto pelo seu conteúdo.
    Para pesquisar recursivamente no diretório atual por arquivos que contenham a palavra “firefox”, use o comando da seguinte forma:

    grep -iR 'firefox' *.conf

    comando grep para encontrar arquivos por conteúdo

    Conclusão

    Como dicas finais, ao fazer a pesquisa dentro de arquivos grandes, gosto de usar os parâmetros -n e --color. O primeiro numera as linhas, tornando mais fácil, ao abrir o arquivo, encontrar algo que eu desejo alterar. O segundo mostra a saída do comando em cores, o que também ajuda a discernir melhor os resultados.
    Você pode obter mais informações sobre o comando ao executar o seu manual:

    man grep

    De um modo geral, o comando é isto aí.
    Divirta-se!

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), desenvolvedor web e geek, nos mais diversos assuntos. Entusiasta de software livre e hacker de LEGO, acredito em repassar meu conhecimento e ajudar as pessoas sempre que for possível.

Por favor, leia nossa Política de Comentários

6 comentários sobre “O comando grep”

  1. Hi users,

    My Text format example :

    AA
    CC
    BB
    AA
    CC
    CC
    AA
    BB
    CC
    AA

    I need to get only this sequence of lines:

    AA
    BB
    CC

    Any suggestion for use grep, awk or sed in this case?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *