Tutorial de expressão regular do Linux: exemplo de Grep Regex

⚡ Resumo Inteligente

As expressões regulares do Linux são sequências de caracteres especiais que pesquisam dados e encontram padrões complexos em ferramentas como grep, sed e vi, usando formas básicas, de intervalo, estendidas e de expansão de chaves para filtrar o texto com precisão.

  • 🔎 O que eles são: Expressões regulares, abreviadas para regexp ou regex, descrevem padrões de texto para busca e correspondência.
  • 🧩 Conjunto básico: Símbolos como . ^ $ * e \ ancoram, repetem e escapam caracteres em um padrão.
  • 🔢 Intervalo: Chaves como {n} e {n,m} controlam quantas vezes o caractere anterior se repete.
  • Estendido: Com o comando grep -E, \+ e \? correspondem a uma ou mais ocorrências de um caractere e a zero ou uma ocorrência, respectivamente.
  • 🧵 Expansão de chaves: As chaves geram múltiplas strings a partir de uma sequência ou de uma lista separada por vírgulas.
  • 🛠️ Onde é utilizado: Ferramentas como grep, sed, tr e vi dependem de expressões regulares para filtrar texto.
  • 🤖 Ajuda da IA: Assistentes de IA e o GitHub Copilot podem gerar, explicar e depurar padrões de expressões regulares rapidamente.

Expressões regulares no Linux com grep — exemplos de regex básicos, por intervalo e estendidos

Expressões regulares são um dos recursos mais poderosos de Linux Ferramentas de texto que permitem encontrar, filtrar e transformar dados com padrões compactos. Esta página explica as formas básica, de intervalo e estendida, além da expansão de chaves, com exemplos práticos do grep.

O que são expressões regulares do Linux?

Expressões regulares do Linux são caracteres especiais que ajudam a pesquisar dados e encontrar padrões complexos. Expressões regulares são abreviadas como 'regexp' ou 'regex'. Elas são usadas em muitos programas do Linux, como... grep, bash, renomear, sed e muito mais.

Tipos de expressões regulares

Para facilitar a compreensão, vamos aprender os diferentes tipos de expressões regulares um por um. Esta página aborda expressões regulares básicas, de intervalo e estendidas, e termina com a expansão de chaves.

Expressões regulares básicas

Alguns dos comandos comumente usados ​​que funcionam com expressões regulares são tr, sed, vie grep. A tabela abaixo lista algumas das expressões regulares básicas.

Símbolo Descrição
. Substitui qualquer caractere
^ Corresponde ao início de uma string
$ Corresponde ao final de uma string
* Corresponde zero ou mais vezes ao caractere anterior.
\ Representa caracteres especiais
() Agrupa expressões regulares
? Corresponde exatamente a um caractere.

Vejamos um exemplo. Primeiro, execute o comando `cat sample` para exibir o conteúdo de um arquivo existente, como mostrado abaixo.

O comando `cat` exibe o conteúdo de um arquivo existente no terminal.

Em seguida, procure por conteúdo que contenha a letra 'a'. A captura de tela abaixo mostra o grep retornando todas as linhas que incluem um 'a'.

grep procurando no arquivo de amostra por linhas que contenham a letra a

O acento circunflexo '^' corresponde ao início de uma string. O exemplo abaixo pesquisa conteúdo que começa com a letra 'a'.

grep com um acento circunflexo, correspondendo apenas às linhas que começam com a letra a.

Apenas as linhas que começam com o caractere são filtradas. Linhas que não contêm o caractere 'a' no início são ignoradas.

Vejamos outro exemplo. A captura de tela abaixo mostra novamente o conteúdo do arquivo de exemplo antes da filtragem pelo final da linha.

Conteúdo do arquivo de exemplo mostrado antes da filtragem de linhas que terminam com a letra t.

Selecione apenas as linhas que terminam com a letra 't' usando o caractere '$' como âncora, conforme mostrado abaixo.

grep com âncora de dólar selecionando apenas linhas que terminam com a letra t

Expressões regulares de intervalo

Essas expressões especificam o número de ocorrências de um caractere em uma string. Elas estão listadas abaixo.

Expressão Descrição
{não} Corresponde exatamente ao caractere anterior que aparece 'n' vezes
{n, m} Corresponde ao caractere anterior que aparece 'n' vezes, mas não mais do que m
{n,} Corresponde ao carácter anterior apenas quando aparece 'n' vezes ou mais

Por exemplo, filtre todas as linhas que contêm o caractere 'p'. A captura de tela abaixo mostra as linhas correspondentes.

O comando grep está filtrando o arquivo de amostra em busca de linhas que contenham o caractere p.

Agora verifique se o caractere 'p' aparece exatamente duas vezes em uma string, uma após a outra. A sintaxe para isso é:

cat sample | grep -E p\{2}

O resultado da correspondência por intervalo é mostrado abaixo.

grep -E expressão de intervalo que corresponde ao caractere p que aparece exatamente duas vezes

Nota: Você precisa adicionar -E com essas expressões regulares.

Expressões regulares estendidas

Essas expressões regulares combinam mais de uma expressão. Algumas delas são:

Expressão Descrição
\+ Corresponde a uma ou mais ocorrências do caractere anterior
\? Corresponde a zero ou uma ocorrência do caractere anterior

Por exemplo, pesquise todas as ocorrências do caractere 't'. A captura de tela abaixo mostra o resultado.

grep procurando no arquivo de amostra todas as linhas que contêm o caractere t

Suponha que você queira filtrar as linhas onde o caractere 'a' precede o caractere 't'. Você pode usar um comando como o abaixo:

cat sample|grep "a\+t"

O resultado é mostrado na captura de tela a seguir.

grep expressão estendida que corresponde a um ou mais caracteres a seguidos por t

Expansão da cinta

A sintaxe para expansão de chaves é uma sequência ou uma lista de itens separados por vírgulas dentro de chaves '{}'. Os itens inicial e final de uma sequência são separados por dois pontos '..'.

Alguns exemplos são mostrados abaixo.

O comando `echo` utiliza expansão de chaves para gerar múltiplas strings a partir de uma sequência e uma lista.

Nos exemplos acima, o comando echo cria strings usando expansão de chaves, produzindo múltiplas strings a partir de um único padrão.

Perguntas Frequentes

Por padrão, o grep usa expressões regulares básicas. O egrep habilita expressões estendidas (o mesmo que grep -E), e o fgrep busca correspondências em strings fixas sem usar expressões regulares (grep -F). A versão moderna do GNU grep marca o egrep e o fgrep como obsoletos, portanto, prefira grep -E e grep -F.

As classes de caracteres correspondem a uma categoria de caracteres. Expressões entre colchetes, como [az], correspondem a um intervalo, enquanto classes POSIX, como [[:alpha:]], [[:digit:]] e [[:space:]], correspondem a letras, números e espaços em branco. Elas mantêm os padrões legíveis e portáteis em diferentes localidades.

Adicione a opção -i, por exemplo, `grep -i "hello" sample`. Isso encontrará "Hello", "HELLO" e "hello" da mesma forma. Sem o -i, as expressões regulares diferenciam maiúsculas de minúsculas, portanto, uma letra maiúscula e sua forma minúscula são tratadas como dois caracteres diferentes.

Os curingas do shell (globbing) expandem os nomes dos arquivos, onde * representa qualquer caractere e ? representa um único caractere. Expressões regulares correspondem ao texto dentro dos arquivos, onde * representa zero ou mais ocorrências do caractere anterior. Os mesmos símbolos têm significados diferentes em cada contexto.

Use a opção -o, por exemplo, grep -o “a\+t” sample. Em vez de imprimir a linha inteira, o grep imprime apenas a parte que corresponde ao padrão, uma correspondência por linha. É útil para exemplos.tracvalores como e-mails ou números.

Use a alternância com o símbolo de barra vertical (pipe). No modo estendido, `grep -E “cat|dog” sample` corresponde a linhas que contenham "cat" ou "dog". No modo básico, você deve usar o caractere de escape, como em `grep “cat\|dog” sample`. A alternância permite que um único comando busque por vários padrões simultaneamente.

Assistentes de IA podem transformar uma descrição em linguagem simples em uma expressão regular funcional, explicar o que um padrão enigmático faz e sugerir correções quando uma correspondência falha. Ferramentas de aprendizado de máquina também detectam padrões recorrentes em grandes arquivos de log que seriam tediosos de transcrever manualmente.

Sim. Travas deslizantes portáteis Copiloto do GitHub Sugere comandos grep e expressões regulares diretamente de um comentário ou de um padrão parcial enquanto você digita. Isso acelera a escrita de expressões complexas, embora seja recomendável testar qualquer padrão gerado com dados de amostra reais antes de utilizá-lo.

Resuma esta postagem com: