O conceito de "pipe" (tubulação) no Bash e em outros shells Unix-like é uma das funcionalidades mais poderosas e úteis para encadear comandos e scripts, permitindo a construção de operações complexas a partir de comandos simples. Um pipe passa a saída (stdout) de um comando como entrada (stdin) para outro, formando uma cadeia de processamento de dados sequencial que é tanto eficiente quanto flexível.
A operação de pipe é representada pelo caractere |. Quando você usa esse operador entre dois comandos, o shell redireciona a saída do primeiro comando diretamente para a entrada do segundo. Isso permite combinar as funcionalidades de diversos programas de forma elegante e eficiente.
Uma das utilizações mais comuns de pipes é na manipulação de texto com grep, sort, awk e sed. Por exemplo:
cat arquivo.txt | grep "erro" | sort | uniq -c- 📁
cat arquivo.txtlê o conteúdo do arquivo. - 📜
grep "erro"filtra linhas que contêm a palavra "erro". - 🔍
sortordena as linhas filtradas. - 📌
uniq -cconta e remove linhas duplicadas, deixando uma linha para cada ocorrência única com a contagem de ocorrências.
Pipes são extremamente úteis para monitorar arquivos de log em tempo real:
tail -f log.txt | grep "WARNING"Aqui, tail -f lê as últimas linhas do arquivo de log syslog e continua lendo novas linhas à medida que são adicionadas ao arquivo, enquanto grep "WARNING" filtra essas linhas para mostrar apenas eventos relacionados a avisos.
Cada comando em um pipeline faz sua tarefa específica e passa seus dados para o próximo comando. Isso adere ao princípio Unix de "fazer uma coisa e fazê-la bem", permitindo que você combine ferramentas simples de maneiras poderosas.
Ao usar pipes, os dados são processados em fluxo (streaming), o que significa que não é necessário armazenar grandes quantidades de dados intermediários em disco ou em memória.
Pipes permitem a construção de cadeias de comandos que podem realizar tarefas complexas de processamento de dados com poucas linhas de código.
Se um comando em um pipeline falha, isso pode afetar toda a cadeia. Veja fluxos/robustez.md (set -o pipefail).
Embora eficientes, pipes podem ser custosos em termos de performance se não forem bem estruturados, especialmente se cada passo do pipeline processar grandes volumes de dados.
Aprofundar: texto/manipulacao.md · Exercícios: exercicios.md · PLANO-EXERCICIOS.md