Filtrando textos com sed,cut,paste,grep e awk
Apresentarei os principais filtradores de texto via linha de comando, na ordem do título: sed, cut, paste, grep e awk.
Filtrando textos com sed,cut,paste,grep e awk
Apresentarei os principais filtradores de texto via linha de comando, na ordem do título: sed, cut, paste, grep e awk.

SED
Modifica arquivos como um editor de textos, porém sem abrí-los.
Flags:
-d: delete, para deletar linhas ou palavras desejadas.
-s: subtitute, para substituir linhas ou palavras desejadas.
-i: de fato faz alterações nos arquivos, sem o -i, o sed somente ilustrará uma saída desejada.
-p: print, para ilustrar dados do arquivo.
Substituindo uma palavra por outra:
sed ‘s/palavra_original/palavra_nova/’ arquivo

Substitui todas as ocorrências de uma palavra por outra:
sed ‘s/palavra_original/palavra_nova/g’ arquivo

Deleta conteúdo do arquivo:
sed ‘/palavra/d’ arquivo

Adicionar algum conteúdo depois da linha 8:
sed ‘aPALAVRA’ zzz.txt
sed ‘8aBobobo-bobobo-bo’ zzz.txt
Adicionar algum conteúdo antes da linha 2:
sed ‘iPALAVRA’ zzz.txt
sed ‘2iBobobo-bobobo-bo’ zzz.txt

CUT
Exibe um recorte de texto de um arquivo.
Flags:
-c: caracteres, indica a quantidade de caracteres exibida.
-d: delimitador que será o referencial do que se separar.
-f: field, indica campos desejados.
Pego a primeira letra de cada fileira:
cut -c 1 palavras2.txt
Pego as 3 primeiras letras de cada fileira:
cut -c 1,2,3 palavras2.txt

Usando vírgula para delimitar os campos(-f) 1 até o campo 3:
cut -d ‘,’ -f 1,3 palavras2.txt
Usando espaço para delimitar os campos(-f) 1 até o campo 3:
cut -d ‘ ’ -f 1,3 palavras2.txt
Usando vírgula para exibir o campo(-f) 3:
cut -d ‘,’ -f 3 palavras2.txt

Cria um novo arquivo com o padrão desejado:
cut -d ‘,’ -f 3 palavras2.txt > palavras3.txt
Pegando dados do /etc/passwd:
tail -2 /etc/passwd | cut -f1 -d:

Selecionado alguns campos de um arquivo.csv:
cut -f1–3 -d, arquivo.csv

PASTE
Faz a mesma coisa que o cat: amostragem de texto de um arquivo. Porém, enquanto o Paste concatena arquivos lado a lado. Como no exemplo abaixo:

Flags:
-d: delimitador, seguido de um caractere, vai definir, o que ficará entre os textos dos arquivos concatenados.
-s: serial, sozinho vai apenas exibir o texto horizontalmente, como seria o cat.
Usando o + como delimitador entre os dois arquivos numeros1 e numeros2 e usa o programa bc(basic calculator) para somar os números dos arquivos, enviando o resulado para numeros3
paste -d+ numeros1 numeros2 | bc echo > numeros3

Exibindo horizontalmente e depois, com a soma dos números:
paste -s numeros1
paste -s numeros1 -d+ | bc

Fatorial do número 10:
seq 10 | paste -sd* | bc

Fazer várias contas de uma vez:
paste -s numeros1 -d\/*+-

GREP
É um programa que faz buscas de padrões de textos em arquivos.
Antes dos comandos, as utilidades dos caracteres:
Caracteres alfanuméricos:
[0–9]: qualquer número.
[0–9A-Za-z]: qualquer número ou letra do alfabeto(maiúsuclo ou minúsculo).
[A-Za-z]: letra do alfabeto(maiúsuclo ou minúsculo).
Quantificadores:
{x}: indica o número exato de caracteres.
{x,}: indica o número de caracteres ou mais.
{,y}: pede por mais de y caracteres.
{x,y}: pede por padrões entre os números indicados.
Para Regex
Para expressão regular:
.: ponto aceita qualquer caractere, menos quebra de linha(nova linha).
?: interrogação aceita 0 ou 1 caractere.
*****:asterisco aceita 0 ou mais caracteres.
+:mais aceita 1 ou mais caracteres.
Posicionadores:
^: indica início de linha.
$:indica fim de linha.
^$: indica linha vazia.
\<: indica começo de uma palavra.
>: indica fim de uma palavra.
\b \b:representam as pontas de um texto, o início e o fim.
POSIX:
[:alplha:] faz pareamento com qualquer caractere do alfabeto.
[:digit:] faz pareamento com qualquer número.
[:alnum:] faz pareamento com qualquer caractere do alfabeto ou numérico.
[:blank:] faz pareamento com tab ou espaço.
[:lower:] faz pareamento com qualquer caractere do alfabeto em minúsculo.
[:upper:] faz pareamento com qualquer caractere do alfabeto em maiúsculo.
[:print:] faz pareamento com qualquer caractere printável.
[:punct:] faz pareamento com qualquer caractere de pontuação.
Antes das flags:
egrep,fgrep e rgrep são versões já em desuso e estas flags as substituíram.
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
FLAGS:
-F: equivalente ao fgrep, busca pelo padrão exato especificado.
-f: compara padrões entre arquivos.
-r: equivalente ao rgrep, para pesquisar com recursividade, adentrando os diretórios.
-E: equivalente ao egrep, aceita expressões regulares.
-e: habilita regex também.
-i: ignora case sensitive(se é maiúsculo/minúsculo).
-c: contabiliza a quantidade de matches
-l: exibe os arquivos que deram matches.
-L: exibe os arquivos que não deram matches.
-v: exibe as linhas que não deram match.
-m: delimita o número de até x linhas na exibição.
-n: exibe o número de linhas dos matches.
-o: apenas mostra a parte do match do texto.
-x: exibe linhas inteiras onde houve match.
-w: word, indica pro grep fazer pareamento só com palavras.
-W: exibe só linhas.
-A: exibe x linhas depois de um match.
-B: exibe x linhas antes de um match.
-C: exibe x linhas antes e depois de um match.
USO:
grep -FLAGS busca_desejada ARQUIVO
Básico, buscando pelo padrão ‘pamac’, no arquivo pacman.log:
grep pamac pacman.log

Ou se usa o caminho, assim:
grep pamac /var/log/pacman.log
Contando linhas dos padrões(-n) e contando quantidade de aparições(-c):
grep -n pamac pacman.log
grep -n -c pamac pacman.log

Pegando linhas que não estão no padrão:
grep -v Venusaur poke

Inibindo comentários(que começam com #):
grep -v ^# arquivo.csv

Buscando pelas duas iniciais ocorrências que tenham b:
grep -n -i “b” poke | head -n 2
Só mostra a vogal “b” e onde está(linha):
grep -n -o -i “b” poke
Mostra as últimas ocorrência de ‘b’:
grep -n -i “b” poke | tail -n 2

Linhas que começam com maiúsculo:
grep -E ‘^[A-Z]’ poke

Linhas que terminam com número:

Linhas que começam com maiúsculo e terminam com número:

Linhas que começam com maiúsculo ou terminam com número:

Inibindo linhas vazias:
grep -v ^$ palavras.txt

Comando que mostra palavras que tenham 5 dígitos e comecem com S(S+dígitos):
grep -Eow -i ‘\b[sS][a-zA-Z0–9]{4}\b’ poke

Combando grep com pipe, uso mais comum:
history | grep pacman

Combando os dois comandos acima, inibindo comentários e linhas vazias:

Inibindo comentários e linhas vazias de novo, com regex:
grep -Ev ‘(^#|^$)’ arquivo2.csv
Busca algum caractere que tem no arquivo1 que tem no arquivo2:
grep -f numeros1 numeros2

Busca por linhas exatamente iguais:
grep -Fxf poke pokem.txt
Busca por palavras exatamente iguais:
grep -F -f poke pokem.txt

Usando -r para buscar pelo padrão ‘Bulbasaur’ em vários arquivos(-n pra contar):
grep -rn Bulbasaur ./
Mostrando os arquivos que deram match com -l:
grep -rl Bulbasaur ./

Combando com o wc para contar:
grep -r “Bulbasaur” ./ | wc -l

Usando “| grep” para filtrar uma parte desejada do texto:
man ls | grep “ -a”
Indicando que desejo que se exiba mais uma linha após o match com -A1:
man ls | grep -A1 “ -a”

Mostrando linhas com números:
grep 8 arquivo.csv
grep [0–9] arquivo.csv

Pega palavras que tenham 3 a 6 dígitos.
grep -Eow ‘\b[a-zA-Z]{3,6}\b’ arquivo.csv

AWK
É uma linguagem de programação voltada para filtragem de texto. Por padrão é case sensitive e suporta regex.
Flags:
-v: define uma variável.
-f: aponta para um arquivo que será usado.
-F: field, de campo separador, o padrão é o espaço, mas com esta flag pode ser redefinido.
Formato:
awk ‘{comando}’ arquivo
awk ‘/regex/{comando}’ arquivo
Uso:
Printar tudo e printar só a primeira coluna e primeira e segunda colunas:
awk ‘{print $0}’ poke
awk ‘{print $1}’ poke
awk ‘{print $1,$2}’ poke

Por padrão, awk usa espaço como separador, então se quiser ver colunas com base em outro separador:
awk -F, ‘{print $3,$2}’ arquivo.csv

Usando dois-pontos e um separador entre as saídas:
awk -F: ‘{print $1 “ → “ $6 “ → “ $7}’ /etc/passwd
(Mostrando os usuários e o caminho do shell no /etc/passwd, onde o $1 indica primeiro campo, $6 sexto campo e $7 sétimo campo, e os campos são delimitados pelo -F:.)

Usando com o grep:
awk -F: ‘{print $1 “ → “ $6 “ → “ $7}’ /etc/passwd | grep “iosephvs”

Ignorando se o texto é maiúsculou minúsculo:
awk ‘/[Bb]ulbasaur/’ poke
awk ‘BEGIN{IGNORECASE=1} /bulbasaur/’ poke

Exclamação nega o padrão:
awk ‘!/elekid/’ poke

Linhas que começam com uma palavra:
awk ‘/^Snivy/’ poke
Linhas que terminam com uma palavra:
awk ‘/Venusaur$/’ poke
Linhas que começam com uma palavra e terminam:
awk ‘/^Bulbasaur Venusaur$/’ poke

Linhas com uma determinada sequência de caracteres, 4 números neste caso:
awk ‘/[0–9]{4}/’ poke

Linhas que só tem letras:
awk ‘/[A-Za-z]/’ poke
Linhas que começam com letras maiúsculas:
awk ‘/^[A-Z]/’ poke

Linhas que começam com letras e terminam com números:
*awk ‘/^[A-Za-z].[0–9]$/’ file.txt**

Contabilizar uma quantidade de padrões(a quantidade de vezes que 2025 aparece):

Acabou.
메타데이터
- post_id
- c58ea87167b0
- slug
- filtrando-textos-com-sed-cut-paste-grep-e-awk-c58ea87167b0
- url
- https://medium.com/@linux-para-otarios/filtrando-textos-com-sed-cut-paste-grep-e-awk-c58ea87167b0
- canonical_url
- https://medium.com/@linux-para-otarios/filtrando-textos-com-sed-cut-paste-grep-e-awk-c58ea87167b0
- author_url
- https://medium.com/@linux-para-otarios
- status
- ok
- fetched_at
- 2026-06-09 15:37:30