Expressoes Regulares: BRE, ERE e grep

Expressoes Regulares: BRE, ERE e grep

O Que Voce Vai Conquistar

  • Explicar a diferenca entre Expressoes Regulares Basicas (BRE) e Estendidas (ERE)
  • Escrever padroes precisos usando ancoras, classes de caracteres e quantificadores
  • Usar regex adequadamente com grep / egrep / sed
  • Extrair e excluir linhas correspondentes a padroes especificos de logs
  • Parar de cometer o erro frequente no exame "barra invertida em BRE"

Este e o nucleo do objetivo 103.7 do LPIC-1 "Buscar em arquivos de texto usando expressoes regulares". Regex e uma linguagem para descrever padroes de strings e e a base do grep / sed / awk.

Decidindo Entre BRE e ERE

Regex tem dialetos. O LPIC pergunta sobre dois tipos POSIX.

Tipo Comandos Tratamento de + ? { } ( ) |
Expressao Regular Basica BRE grep / sed Barra invertida necessaria (\+ \{ \()
Expressao Regular Estendida ERE grep -E / egrep / sed -E Usados diretamente (+ { ()

A diferenca "escrever \{3\} em grep mas {3} em grep -E" e frequente no exame. Sempre esteja ciente de qual dialeto voce esta escrevendo.

Referencia de Metacaracteres

Metacaractere Significado Exemplo
. Qualquer caractere unico a.c -> abc, axc
* 0 ou mais do precedente ab* -> a, ab, abb
^ Ancora de inicio de linha ^root
$ Ancora de fim de linha bash$
[ ] Classe de caracteres [0-9] um digito
[^ ] Classe negada [^0-9] nao digito
\+ (ERE +) 1 ou mais do precedente a\+
\? (ERE ?) 0 ou 1 do precedente colou\?r
\{n,m\} (ERE {n,m}) Entre n e m vezes [0-9]\{1,3\}
| (OR / alternacao) Corresponder a qualquer lado. BRE precisa da barra invertida, ERE nao cat|dog

Passo a Passo

Passo 1: Fixar posicao com ancoras

grep '^#' /etc/ssh/sshd_config
grep 'bash$' /etc/passwd
grep -x 'root' users.txt
#	$OpenBSD: sshd_config
#Port 22
root:x:0:0:root:/root:/bin/bash
root

^ e inicio de linha e $ e fim de linha, ancoras de largura zero. grep -x corresponde a linha inteira (equivalente a ^pattern$). Esta e a base da extracao de linhas de comentario e busca por correspondencia exata.

Passo 2: Especificar faixas com classes de caracteres

grep '[0-9]\{1,3\}\.[0-9]\{1,3\}' access.log
grep -E '[0-9]{1,3}(\.[0-9]{1,3}){3}' access.log
grep '[[:space:]]' config.txt
192.168.1.10 - - [17/May/2026]
10.0.0.5 - - [17/May/2026]

[0-9] e um digito e \{1,3\} e 1 a 3 repeticoes (BRE requer barras invertidas). [[:space:]] e uma classe de caracteres POSIX que corresponde a espacos em branco.

Passo 3: Usar BRE e ERE adequadamente

grep 'colou\?r' notes.txt
grep -E 'colou?r' notes.txt
grep -E 'error|warning|fatal' app.log
color theme
favourite colour
[ERROR] disk full
[WARNING] high load

Ao usar ? + | {} (), grep -E (ERE) e mais legivel. Fazer o mesmo em BRE requer escaping com barra invertida e reduz a legibilidade.

Passo 4: Combinar extracao e exclusao

grep -v '^#' /etc/fstab | grep -v '^$'
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' access.log | sort -u
grep -ci 'timeout' app.log
UUID=xxxx / ext4 defaults 0 1
192.168.1.10
10.0.0.5
7

-v mostra linhas que nao correspondem (remover comentarios/linhas em branco), -o extrai apenas a correspondencia, -c fornece contagens, -i ignora maiusculas/minusculas. Frequentemente usado para extrair linhas efetivas de arquivos de configuracao.

Passo 5: Substituir com regex no sed

echo "2026-05-17" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
sed -n '/^ERROR/p' app.log
17/05/2026
ERROR connection refused

sed -E e o modo ERE. \1 \2 sao retrorreferencias que reutilizam grupos capturados com ( ) no lado da substituicao. Usado para conversao de formato de data e similares.

Por Que BRE Precisa de Barras Invertidas

BRE historicamente preserva a sintaxe antiga do grep / ed, tratando + ? { ( | como "sem significado especial (literal)". Para usa-los como quantificadores, grupos ou OR, voce deve marcar "este e um metacaractere" com uma barra invertida. ERE remove essa sobrecarga tratando caracteres especiais como metacaracteres desde o inicio. grep -E / egrep habilitam ERE.

Sem entender essa diferenca de design, voce nao consegue explicar "grep 'a+' nao corresponde a um-ou-mais de a (ele busca o literal a+)". O LPIC pergunta exatamente sobre essa armadilha.

Solucao de Problemas

Sintoma: grep 'a+' nao corresponde a um-ou-mais

Causa: Em BRE, + e tratado como um caractere literal

Verificacao:

grep 'a\+' file
grep -E 'a+' file

Solucao: Use ERE (grep -E), ou escape como \+ em BRE.

Sintoma: Um ponto corresponde a qualquer caractere e causa falsos positivos

Causa: . significa qualquer caractere unico em regex

Verificacao:

grep '192\.168' access.log

Solucao: Escape como \. para buscar um ponto literal. Para busca de string fixa, grep -F (fgrep) e seguro.

Sintoma: Nao consegue buscar uma string contendo caracteres especiais

Causa: [ * $ etc. sao interpretados como metacaracteres

Verificacao:

grep -F '[error]' app.log

Solucao: Se o padrao nao precisa de regex, use grep -F para busca de string fixa. Escape apenas os caracteres necessarios com \.

Lista de Verificacao de Conclusao

  • [ ] Verificou correspondencia de inicio/fim de linha com ancoras ^ $
  • [ ] Combinou classes de caracteres como [0-9] com quantificadores
  • [ ] Verificou a diferenca BRE (\{3\}) vs ERE (grep -E '{3}') em uma maquina real
  • [ ] Experimentou as opcoes -v -o -c -i
  • [ ] Substituiu usando retrorreferencias do sed -E (\1)

Resumo

Cenario Sintaxe Proposito
Correspondencia inicio grep '^pattern' Extracao de comentarios/linhas especificas
Correspondencia exata grep -x / ^...$ Correspondencia de linha inteira
Um ou mais grep -E 'a+' Detectar caracteres repetidos
Apenas correspondencia grep -o Obter apenas a parte correspondente
Substituir sed -E 's/.../.../' Reformatar com retrorreferencias

Regex e a base do grep / sed / awk. Em seguida, avance para outras areas do exame como mecanismos de links e prioridades de processos para conectar o conhecimento.

Proximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 — Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos Relacionados do LPIC-1

Pratica