Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

sogrep

Só grep

Juliano Santos
02/12/2016
 

O comando grep procura por linhas que respeitem a expressão regular mencionada. Todas as linhas encontradas são mostradas na saída padrão.

Para aqueles que precisam constantemente filtrar informações, sejam elas na saída de um comando ou até mesmo o conteúdo de um arquivo; o grep torna-se seu fiel escudeiro.

Segue abaixo algumas aplicações do comando:

# Hora no padrão 12 horas (HH:MM)
grep -E '^(0[1-9]|1[0-2]):[0-5][0-9]$'

# Hora no padrão 12 horas (HH:MM:SS)
grep -E '^(0[1-9]|1[0-2])(:[0-5][0-9]){2}$'

# Hora no padrão 24 horas (HH:MM) 
grep -E '^([01][0-9]|2[0-3]):[0-5][0-9]$'

# Hora no padrão 24 horas (HH:MM:SS)
grep -E '^([01][0-9]|2[0-3])(:[0-5][0-9]){2}$$'

# Data no formato dd/mm/aa
grep -E '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{2})$'

# Data no formato dd/mm/aaaa
grep -E '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{4})$'

# Dara por extenso no formato: DIA_SEMANA, DIA_MES de MES de ANO
grep -E '^([Ss]egunda|[Tt]erça|[Qq]uarta|[Qq]uinta|[Ss]exta|[Ss]ábado|[Dd]omingo),\s*(0[1-9]|[12][0-9]|3[01])\s+de\s+([Jj]aneiro|[Ff]evereiro|[Mm]arço|[Aa]bril|[Mm]aio|[Jj]unho|[Jj]ulho|[Aa]gosto|[Ss]etembro|[Oo]utubro|[Nn]ovembro|[Dd]ezembro)\s+de\s+[0-9]{4}$'

# Email
grep -E '[a-zA-Z_-.]+@ [0-9a-zA-Z.-]+\.[a-z]{2,3}$'

# Intervalo 1000 à 3500
grep -E '^([1-2][0-9]{3}|3[0-4][0-9]{2}|3500)$'

# Somente número pares.
grep -E '^[0-9]*[02468]$'

# Somente números ímpares
grep -E '^[0-9]*[13579]$'

# Filtrar nossa moeda real :(
# Formato: x.xxx,xx
grep -E '^[0-9]{1,3}\b(\.[0-9]{3})*,[0-9]{2}$'

# Simulando comando wc -w (considera caracteres especiais)
# Total de palavras em um arquivo.
grep -Eo "\w+" | egrep -c '.'

# Simulando comando wc -l
# Total de linhas em um arquivo.
grep -c '.*$'

# Simulando comando wc -c
# Total de caracteres exceto espaços.
grep -o '.' | grep -Ec '\S'

# Somente as palavras que iniciam com letra maiúscula.
grep -Eo '\b[A-Z]\w+'

# Telefone residencial no formato: (xx) xxxx-xxxx
grep -E '^\([0-9]{2}\)\s*[0-9]{4}-[0-9]{4}$'

# Telefone móvel no formato: (xx) xxxxx-xxxx
grep -E '^\([0-9]{2}\)\s*[0-9]{5}-[0-9]{4}$'

# Filtra endereço IP com os octetos dentro do intervalo
# de 0 à 255, exceto com zeros consecutivos.
grep -E '^(([0-9]|[1-9][0-9]|1[0-9]{,2}|2[0-4][0-9]|25[0-5])[.]){3}([0-9]|[1-9][0-9]|1[0-9]{,2}|2[0-4][0-9]|25[0-5])$'

# MAC Address 'xx:xx:xx:xx:xx:xx'
grep -E '^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$'

# CPF
# Formato: xxx.xxx.xxx-xx
grep -E '^([0-9]{3}\.){2}[0-9]{3}-[0-9]{2}$'

# CNPJ
# Formato: xx.xxx.xxx/xxxx-xx
grep -E '^[0-9]{2}\.[0-9]{3}\.[0-9]{3}/[0-9]{4}-[0-9]{2}$'

# Número positivo ou negativo.
grep -E '^(-?[0-9]{1,})$'

# Somente número negativo
grep -E '^-[0-9]{1,}$'

# Base hexadecimal
grep -E '^[0-9a-fA-F]{1,}$'

# Base binária
grep -E '^1[01]{1,}$'

# Somente a cadeia de caracteres entre parênteses
grep -Eo '\([^)]*\)'

# Extrai extensão de um arquivo
grep -Eo '\b\w+$'

# Simulando comando 'dirname'
grep -Eo '^/.*/'

# Simulando o comando 'basename'
grep -Eo '(\w\s*)+\w*\.[a-z0-9]+$'

# Somente os números em intervalos de 100.
grep -E '^[0-9]*[0-9]00$'

# Endereço http ou https
grep -E '^https?://([A-Za-z0-9_-]+[.]){1,3}[a-z]{2,3}/?$'

# Somente linhas com no máximo 10 caracteres
grep -E '^.{1,10}$'

# Somente linhas com no mínimo 10 caracteres
grep -E '^.{10,}'

# Verifica complexidade de senha
# Requisitos:
# Mínimo 8 caracteres.
#  ""    1 caractere minúsculo.
#  ""    "    ""     maiúsculo.
#  ""    "    ""     caractere especial.
#  ""    "  dígito de 0 à 9
grep -P '^.*(?=.{8,})(?=.*[A-Z])(?=.*\d)(?=.*\W)(?=.*[a-z]).*$'

# Remove linhas comentadas
grep -v '^\s*#'

# Remove linhas em branco
grep -v '^$'

# Simulando o comando head -10
# Imprime as 10 primeiras linhas do arquivo
grep -m 10 '.*$'

# Ignora linhas contendo arquivo com extensão do word. (maldade)
grep -P '^.*(?<!\.doc|\.docx)$'

# Aplicando no arquivo '/etc/passwd', retorna somente as linhas
# dos usuários que possuem o UID entre 1000 e 1999
grep -E '^(\w+:){3}1[0-9]{3}.*$'

# Número com duas casas decimais separadas por '.' (ponto) ou ',' (vírgula)
grep -E '^[0-9]+[,.][0-9]{2}$'

# Imprimindo somente as linhas pares do arquivo.
grep -n '.*$' | grep -E '^[0-9]*[2468]'

# Imprimindo somente as linhas impares do arquivo
grep -n '.*$' | grep -E '^[0-9]*[13579]'

# CEP
# Formato: xxxxx-xxx
grep -E '^[0-9]{5}-[0-9]{3}$'

# Somente unidades de medida de informação começando
# com um ou mais dígitos.
# Exemplo: 1K, 22M, 763G, ...
grep -E '^[0-9]+[KMGTPEZY]$'

# Somente uma letra intercalada com um dígito
# Exemplo: a1b2c3
grep -E '^([a-zA-Z][0-9]|[0-9][a-zA-Z])+$'

# Imprime 2 linhas anteriores a qualquer linha em branco
grep -B2 '^$'

# Imprime 4 linhas posteriores a qualquer linha em branco
grep -A4 '^$'

# Imprime 2 linhas anteriores e posteriores a qualquer linha em branco
grep -C4 '^$'

# Busca por múltiplas palavras sem usar conjuntos (..|..).
grep -F 'palavra1
palavra2
palavra3
'

Nota: Em alguns exemplos acima, utilizei caracteres âncora (^ e $) para forçar a validação de campos, caso deseje validar a expressão em qualquer posição em uma cadeia de caracteres, remova-os.

Se encontrarem algum erro, comentem a respeito, deem dicas ou sugestões para novas aplicações do comando.

Comentários

Contato

Nome

E-mail *

Mensagem *