Manipulação Estruturada de Arquivos: Substituição Rápida de Textos no Terminal com sed
O utilitário sed (Stream Editor) é uma das ferramentas de linha de comando mais poderosas do Linux para aplicar transformações automatizadas em fluxos de texto e arquivos. Ele resolve a necessidade de alterar palavras, caminhos ou padrões repetitivos em massa sem a necessidade de abrir interativamente editores de texto como VIM ou Nano. A seguir, veja como realizar substituições simples, globais e aplicar alterações diretamente nos arquivos salvos.
Bash
#!/bin/bash
# Exemplo prático de substituição de texto com sed em arquivo de configuração
# Criando um arquivo simulado de configuração
cat << 'EOF' > config.env
DB_HOST=127.0.0.1
DB_PORT=5432
APP_MODE=development
LOG_LEVEL=debug
EOF
# 1. Substituição apenas na exibição (stdout), mantendo o arquivo original intocado
sed 's/development/production/' config.env
# 2. Substituição em massa diretamente no arquivo (-i / --in-place)
sed -i 's/127.0.0.1/10.0.0.5/g' config.env
# 3. Alterando delimitadores para manipular caminhos ou URLs sem erro de sintaxe
sed -i 's|LOG_LEVEL=debug|LOG_LEVEL=info|g' config.env
echo "=== Conteúdo atualizado do config.env ==="
cat config.env
Exemplo de uso e verificação no terminal:
Bash
# Criando um backup (.bak) automático ao alterar o arquivo original diretamente
sed -i.bak 's/production/staging/g' config.env
# Verificando as alterações
cat config.env
Pontos-chave
- O Flag
/g(Global): Por padrão, a instruçãos/antigo/novo/altera apenas a primeira ocorrência da linha; adicione o sufixo/gao final para substituir todas as ocorrências encontradas. - Modificação In-place (
-i): A flag-isobrescreve o arquivo diretamente; usar-i.bakcria uma cópia de segurança antes de aplicar a alteração no arquivo original. - Alteração de Delimitadores: É possível trocar a barra (
/) por qualquer outro caractere especial (como|ou#) na expressãos|velho|novo|, evitando conflitos e o uso excessivo de escapes ao editar URLs ou caminhos de diretórios. - Suporte a Expressões Regulares: O
sedaceita padrões de regex; adicione a opção-Epara ativar a sintaxe de expressões regulares estendidas para substituições mais complexas. - Incompatibilidade macOS vs Linux: No macOS (BSD
sed), a flag-iexige obrigatoriamente a declaração da extensão do backup (ex:sed -i '' 's/a/b/g' arquivo), diferente do padrão GNUsedutilizado no Linux.
