Skip to content

Exemplos de uso do comando grep do Linux

8 de abril de 2021

O comando grep do Linux é usado como um método para filtrar a entrada. GREP significa Global Regular Expression Printer e, portanto, para usá-lo com eficácia, você deve ter algum conhecimento sobre expressões regulares. Neste artigo, você aprenderá vários exemplos que o ajudarão a entender o comando grep.

Como pesquisar uma string em um arquivo usando GREP

Imagine que você tenha um arquivo de texto chamado livros com os seguintes títulos de livros infantis:

  • Robin Hood
  • Chapeuzinho Vermelho
  • Peter Pan
  • Cachinhos Dourados e os três ursos
  • Branca de Neve e os Sete Anões
  • Pinochio
  • O gato no chapéu
  • Os três Porquinhos
  • O gruffalo
  • Charlie e a fabrica de chocolate

Para encontrar todos os livros com a palavra “The” no título, você usaria a seguinte sintaxe: grep Os livros

Os seguintes resultados serão retornados: Cachinhos Dourados e os Três Ursos
Branca de Neve e os Sete Anões
O gato no chapéu
Os três Porquinhos
O gruffalo
Charlie e a fabrica de chocolate

Em cada caso, a palavra “The” será destacada. A pesquisa diferencia maiúsculas de minúsculas, portanto, se um dos títulos tivesse “o” em vez de “O”, ele não teria sido retornado. Para ignorar o caso, você pode adicionar a seguinte opção: grep the books –ignore-case

Você tmbém pode usar a opção -i da seguinte forma: grep -i the books

Pesquisar uma string em um arquivo usando expressões regulares

O comando grep é muito poderoso. Você pode usar uma variedade de técnicas de correspondência de padrões para filtrar os resultados. Neste exemplo, mostraremos como pesquisar uma string em um arquivo usando curingas. Imagine que você tenha um arquivo chamado places com os seguintes nomes de lugares escoceses: aberdeen
Aberystwyth
aberlour
Inverurie
inverness
Newburgh
novo veado
New Galloway
Glasgow
Edimburgo

Se você deseja encontrar todos os locais com inver no nome, use a seguinte sintaxe: grep inver * locais

O asterisco
personagem não funciona exatamente como no Bash normal. No contexto do grep, que lida com expressões regulares, o asterisco se comporta de maneira diferente. Em vez de corresponder a qualquer ou nenhum caractere, como Bash, ele corresponde ao padrão inserido mais qualquer ou nenhuma repetição subsequente desse padrão. No exemplo acima, ele corresponde a: inverurie

inverness

porque ambos contêm o padrão “inver” conforme inserido mais zero repetições adicionais desse padrão. Para ver isso novamente com mais clareza, adicione: repeatinverinverinver

para a lista. Não, não faz muito sentido, mas vai demonstrar como o asterisco funciona. Tente executar o comando novamente. grep inver * places Você vê a nova linha? Isso não funcionaria no Bash, mas funciona aqui. Para tornar as coisas ainda mais estranhas, execute o comando sem o asterisco. grep inver places

Os resultados são os mesmos. Por padrão, o grep irá procurar um padrão em qualquer lugar que ele apareça na string de texto. Também não diferencia quantas vezes ele aparece. Outro curinga que você pode usar é o ponto (.). Você pode usar isso para corresponder a uma única letra. locais grep inver.r

  • O comando acima encontraria lugares chamados inverurie e inverary, mas não encontraria invereerie porque só pode haver um curinga entre os dois r’s denotados pelo ponto único. O caractere curinga de ponto é útil, mas pode causar problemas se você tiver um como parte do texto que está pesquisando. Por exemplo, olhe para esta lista de nomes de domínio
  • linux.lifewire.com
  • pcsupport.lifewire.com
  • mp3.lifewire.com
  • minecraft.lifewire.com
  • androidgames.lifewire.com
  • netforbeginners.lifewire.com
  • Dailylinuxuser.com
  • google.co.uk
  • google.au
  • direct.gov.uk

Para encontrar todos os URLs da lifewire.com, você pode pesquisar usando a seguinte sintaxe: grep .com domainnames

O comando acima cairia se a lista contivesse o seguinte nome: dailylinuxuser.com

Você pode, portanto, tentar a seguinte sintaxe: grep lifewire.com nomes de domínio

Isso funcionaria bem, a menos que houvesse um domínio com o seguinte nome: fakesite.lifewire1com.com

Para realmente pesquisar o termo lifewire.com, você precisa escapar o ponto da seguinte forma: grep lifewire . com domainnames

O caractere curinga final para mostrar a você é o ponto de interrogação que representa zero ou um caractere. Por exemplo: grep -E? Ber placenames

 

O comando acima retornaria aberdeen, aberystwyth ou mesmo berwick, se estivesse na lista. Observe o sinalizador extra ‘-E’ também. Grep não reconhecerá o? caractere sem habilitar o suporte estendido de expressão regular.

Pesquise por Strings no início e no final da linha usando grep

  • O carat (^) e o símbolo do dólar ($) permitem que você pesquise padrões no início e no final das linhas. Imagine que você tenha um arquivo chamado football com os seguintes nomes de times:
  • Blackpool
  • Liverpool
  • Cidade de Manchester
  • Leicester City
  • Manchester United
  • Newcastle United

FC United Of Manchester

Se você quisesse encontrar todos os times que começaram com Manchester, você usaria a seguinte sintaxe: grep ^ Manchester times

O comando acima retornaria Manchester City e Manchester United, mas não FC United Of Manchester. Alternativamente, você pode encontrar todas as equipes que terminam com United usando a seguinte sintaxe: grep United $ teams

O comando acima retornaria ao Manchester United e Newcastle United, mas não ao FC United Of Manchester.

Contando o número de correspondências usando grep

Se você não deseja retornar as linhas reais que correspondem a um padrão usando grep, mas deseja apenas saber quantas existem, pode usar a seguinte sintaxe: grep -c pattern inputfile

Se o padrão fosse correspondido duas vezes, o número 2 seria retornado.

Encontrando todos os termos que não combinam usando grep

  • Imagine que você tenha uma lista de nomes de lugares com os países listados a seguir:
  • aberdeen escócia
  • glasgow Escócia
  • liverpool inglaterra
  • Colwyn Bay

Londres, Inglaterra

Você deve ter notado que colwyn bay não tem nenhum país associado a ela. Para pesquisar todos os lugares com um país, você pode usar a seguinte sintaxe: grep land $ places

Os resultados retornados seriam todos os lugares, exceto colwyn bay. Obviamente, isso só funciona para lugares que terminam em terra (dificilmente científico). Você pode inverter a seleção usando a seguinte sintaxe: grep -v land $ places

Isso iria encontrar todos os lugares que não terminam com terra.

Como encontrar linhas vazias em arquivos usando grep

  • Imagine que você tenha um arquivo de entrada que é usado por um aplicativo de terceiros que para de ler o arquivo quando encontra uma linha vazia da seguinte maneira:
  • aberdeen escócia
  • Inverness Escócia
  • inglaterra liverpool

Colwyn Bay Wales

Quando o aplicativo chega à linha após o liverpool, ele para de ler, o que significa que a baía de colwyn foi totalmente perdida. Você pode usar o grep para pesquisar linhas em branco com a seguinte sintaxe: grep ^ $ places

Isso não é particularmente útil porque apenas retorna as linhas em branco. Você poderia, é claro, obter uma contagem do número de linhas em branco como uma verificação para ver se o arquivo é válido da seguinte maneira: grep -c ^ $ places

Seria, entretanto, mais útil saber os números das linhas que têm uma linha em branco para que você possa substituí-los. Você pode fazer isso com o seguinte comando: grep -n ^ $ places

Como pesquisar strings de caracteres maiúsculos ou minúsculos usando grep[A-Z]Usando grep, você pode determinar quais linhas em um arquivo têm caracteres maiúsculos usando a seguinte sintaxe: grep ‘

‘ nome do arquivo [] Os colchetes[a-z]permitem que você determine a gama de caracteres. No exemplo acima, ele corresponde a qualquer caractere que esteja entre A e Z. Portanto, para corresponder a caracteres minúsculos, você pode usar a seguinte sintaxe: grep ‘

‘ nome do arquivo[a-zA-Z]Se você deseja corresponder apenas letras e não números ou outros símbolos, você pode usar a seguinte sintaxe: grep ‘

‘ nome do arquivo[0-9]Você pode fazer o mesmo com os números da seguinte maneira: grep ‘

‘ nome do arquivo

Procurando por padrões de repetição usando grep

  • Você pode usar colchetes {} para pesquisar um padrão de repetição. Imagine que você tenha um arquivo com os números de telefone da seguinte maneira:
  • 055-1234
  • 055-4567
  • 555-1545
  • 444-0167
  • 444-0854
  • 4549-2234

x44-1234 [0-9] Você sabe que a primeira parte do número deve ter três dígitos e deseja encontrar as linhas que não correspondem a esse padrão. Do exemplo anterior, você sabe que[0-9][0-9][0-9]retorna todos os números em um arquivo. Neste caso, queremos as linhas que começam com três números seguidos por um hífen (-). Você pode fazer isso com a seguinte sintaxe: grep “^

– “números [0-9] Como sabemos dos exemplos anteriores, o caractere (^) significa que a linha deve começar com o seguinte padrão. O[0-9]irá procurar qualquer número entre 0 e 9. Como está incluído três vezes, corresponde a 3 números. Finalmente, existe um hífen para indicar que um hífen deve suceder aos três números. Usando as chaves, você pode diminuir a pesquisa da seguinte maneira: grep “^

{3 } – “números [0-9]A barra escapa do {colchete para que funcione como parte da expressão regular, mas em essência o que isso está dizendo é
{3} que significa qualquer número entre 0 e 9 três vezes. As chaves também podem ser usadas da seguinte forma: {5,10}

{5,}

 

O {5,10} significa que o caractere que está sendo pesquisado deve ser repetido pelo menos 5 vezes, mas não mais do que 10, enquanto o {5,} significa que o caractere deve ser repetido pelo menos 5 vezes, mas pode ser mais do que isso.

Usando a saída de outros comandos usando grep

Até agora, vimos a correspondência de padrões dentro de arquivos individuais, mas o grep pode usar a saída de outros comandos como entrada para correspondência de padrões. Um ótimo exemplo disso é usar o comando ps que lista os processos ativos. Por exemplo, execute o seguinte comando: ps -ef

Todos os processos em execução em seu sistema serão exibidos. Você pode usar o grep para pesquisar um processo em execução específico da seguinte maneira: ps -ef | grep firefox

Resumo

O comando grep é um comando fundamental do Linux e vale a pena ser aprendido, pois tornará sua vida muito mais fácil ao pesquisar arquivos e processos ao usar o terminal.