Aula 1.9 — grep, sed, awk e expressões regulares: domine o processamento de texto no Linux
Regex (Expressões Regulares) é uma linguagem de padrões usada para buscar, validar e transformar texto. Em vez de procurar uma palavra exata, você descreve um padrão — por exemplo, "qualquer linha que começa com um número seguido de ponto".
grep — buscar padrões em arquivossed — substituir texto (stream editor)awk — processar colunas e camposvim — busca e substituição no editor💡 Analogia: Regex é como um "curinga super poderoso". Em vez de buscar apenas "gato", você pode buscar "qualquer palavra de quatro letras que começa com g e termina com o".
grep (Global Regular Expression Print) percorre arquivos linha a linha e imprime as que casam com o padrão informado. É a ferramenta de busca mais usada no Linux.
📌 Flags mais usadas: -i ignora case | -n mostra nº linha | -r recursivo | -v inverte | -c conta | -l só nomes dos arquivos | -E regex extendida | -o só o trecho casado
Metacaracteres são símbolos com significado especial nas expressões regulares. Dominá-los é a chave para escrever padrões precisos e poderosos.
| Padrão | Significado |
|---|---|
| [abc] | a, b ou c |
| [a-z] | Letras minúsculas |
| [A-Z] | Letras maiúsculas |
| [0-9] | Dígitos |
| [^abc] | NÃO a, b ou c |
| Escape | Equivale a |
|---|---|
| \d | [0-9] — dígito |
| \w | [a-zA-Z0-9_] |
| \s | Espaço / tab |
| \. | Ponto literal |
| \\ | Barra literal |
💡 Use grep -E (ou egrep) para poder usar +, ? e | diretamente, sem precisar escapá-los com \.
sed (Stream Editor) processa texto linha a linha, aplicando transformações. O uso mais comum é a substituição com a sintaxe s/padrão/novo/flags.
⚠️ Atenção com -i: o flag -i modifica o arquivo original permanentemente. Sempre teste o comando sem -i primeiro para verificar o resultado antes de salvar.
awk é uma linguagem de processamento de texto orientada a campos (colunas). Ele divide cada linha em campos separados por espaço (ou outro delimitador) e permite trabalhar com cada campo individualmente.
📌 Variáveis especiais do awk: $0 = linha inteira | $1 a $N = campos | $NF = último campo | NR = nº da linha | FS = separador de campos
O pipe | conecta a saída de um comando à entrada do próximo. Combinando grep, sed e awk com pipes, você constrói pipelines de processamento extremamente poderosos.
💡 Filosofia Unix: cada ferramenta faz uma coisa bem feita. A combinação delas via pipe cria soluções elegantes. grep filtra, awk processa, sed transforma, sort ordena, uniq deduplica.
Logs de sistema são a principal aplicação cotidiana de regex e filtros. Veja como extrair informações úteis de arquivos como /var/log/syslog e /var/log/auth.log.
⚠️ Regex e segurança: analise logs regularmente em busca de tentativas de acesso suspeitas. Múltiplos "failed" do mesmo IP indicam possível ataque de força bruta. Use grep -c "Failed password" no auth.log para monitorar.
📌 Dica de ouro: teste suas expressões regulares em regex101.com antes de aplicar em produção — o site explica cada parte do padrão em tempo real.
Arraste cada descrição para o comando ou expressão correspondente.
grep -i "error" /var/log/syslog
grep -n "^root" /etc/passwd
sed 's/old/new/g' arquivo.txt
awk '{print $1}' arquivo.txt
grep -rE "192\.168\.[0-9]+" /etc/
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
grep -i "error" /var/log/syslog | tail -20. Observe as últimas 20 linhas com erros. Em seguida, use grep -c "error" /var/log/syslog para contar o total de ocorrências e registre o número.grep -rE "192\.168\.[0-9]+" /etc/ para localizar arquivos de configuração que referenciam endereços IP da rede local. Depois experimente grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /etc/hosts para extrair apenas os IPs.echo -e "erro: disco cheio\nerro: memória baixa\ninfo: tudo ok" > teste.log. Depois aplique sed 's/erro/ALERTA/g' teste.log e observe a substituição. Tente também deletar as linhas de info: sed '/^info/d' teste.log.awk -F: '{print $1, $3}' /etc/passwd | head -10 para listar nome e UID dos usuários. Em seguida filtre apenas os usuários do sistema: awk -F: '$3 >= 1000 {print $1}' /etc/passwd.grep -i "error" /var/log/syslog | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -5. Este comando conta quantos erros ocorreram em cada hora do dia, mostrando os 5 horários com mais problemas./var/log/auth.log, execute: grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn > ~/relatorio_acesso.txt && cat ~/relatorio_acesso.txt. Isso gera um relatório com os usuários que tiveram mais tentativas de login falhas.