By Marcos Oliveira,

Shell Script validando com Expressões Regulares

grep é um utilitário de linha de comando para procurar conjuntos de dados de texto simples para as linhas que correspondem a uma expressão regular.

grep [OPÇÕES] expressão_regular arquivo

CaracterDescrição
.Qualquer letra
^início da linha
$final da linha
[xyz]Qualquer das letras dentro dos colchetes
[^xyz]Qualquer letra fora as dentro dos colchetes
[t-z]Qualquer das letras entre t e z
z* Letra z zero ou mais vezes
z+ Letra z uma ou mais vezes
?{0,1}Pode aparecer ou não (opcional)
*{0,}Pode aparecer em qualquer quantidade
+{1,}Deve aparecer no mínimo uma vez
a{2}Casa a letra 'a' duas vezes
a{2,4}Casa a letra 'a' de duas a quatro vezes
a{2,}Casa a letra 'a' no mínimo duas vezes
.*Casa qualquer coisa, é o tudo e o nada
^início da linha
$final da linha
[abc]casa com os caracteres a, b e c
[a-c]casa com os caracteres a, b e c
[^abd]não casa com os caracteres a, b e d
(um|dois)casa com as palavras um e dois
Repetições
a{2}casa com a letra “a” duas vezes
a{2,5}casa com a letra “a” duas a cinco vezes
a{2,}casa com a letra “a” duas vezes ou mais
a?casa com “a” letra a zero vezes ou uma
a*casa com a letra “a” zeros vezes ou mais
a+casa com a letra “a” uma vez ou mais
Curingas
.casa com qualquer caracter uma vez
.*casa com qualquer caracter várias vezes
(esse|aquele)Casa as palavras 'esse' ou 'aquele'

Exemplos

1-Procura a palavra marcos no arquivo /etc/passwd:

grep marcos /et/passwd

2-Procura todas as linhas começadas pela letra u no arquivo /etc/passwd:

grep '^u' /et/passwd

3-Procura todas as linhas terminadas pela palavra false no arquivo /etc/passwd:

grep 'false$' /et/passwd

4-Procura todas as linhas começadas pelas vogais no arquivo /etc/passwd:

grep '^[aeiou]' /et/passwd

5-Procura todas as linhas começadas por qualquer caracter e segundo caracter seja qualquer vogal no arquivo /etc/passwd:

grep '^.[aeiou]' /et/passwd

6-Procura todas as linhas que contenham uma sequência de 4 números consecutivos:

grep '[0-9][0-9][0-9][0-9]' /et/passwd

7-Comando para encontrar linhas em branco:

grep '^$' /et/passwd

8-Encontrar e contar linhas em branco:

grep '^$' /et/passwd | wc -l

9-Encontrar mesmo nome, porém com letra inicial minúscula e maiúscula:

grep '[Mm]arcos' /et/passwd

10-Encontrar 27 sequência^de 27 caracteres:

egrep '^.{27}$' passwd

Note que foi usado o egrep e não o grep. É porque as chaves fazem parte de um conjunto avançado de Expressões Regulares (“extended”), então o egrep lida melhor com elas. Se fosse para usar o grep normal, teria que “escapar” as chaves

grep '^.\{27\}$' /etc/passwd

11-Para procurar por linhas que tenham de 20 a 40 caracteres:

egrep '^.{20,40}$' /etc/passwd

12-Para obter as linhas que possuem 40 caracteres ou mais:

egrep '^.{40,}$' /etc/passwd

13-Econtrar números com 3 dígitos (de 0 a 9) ou mais:

egrep '[0123456789]{3,}' /etc/passwd

14-Econtrar linhas que começam com ‘vogal minúscula’ e terminam com a palavra ‘bash’, usa−se o curinga “.*” para significar “qualquer coisa”(não confunda com “qualquer caracterer” somente “.”):

egrep '^[aeiou].*bash$' /etc/passwd

15-Procura linhas que comecem com a palavra ‘eric’ ou ‘marcos’ ou ‘camila’:

egrep '^(eric|marcos|camila)' /etc/passwd

16-Procura todas as linhas que NÃO comecem com a letra minúscula ‘m’

egrep '^[^marcos]' /etc/passwd

Script com validações de Tel,E-mail,CEP,IP,Data…

#!/bin/bash
# Script com validações de Tel,E-mail,CEP,IP,Data...
####################### VALIDAR TELEFONE no formato: (99)9999-9999 ################################################
echo 'Informe o número de Telefone.Formato: (99)9999-9999';
read TELEFONE
echo $TELEFONE | egrep '^[(][0-9]{2}[)][0-9]{4}+-[0-9]{4}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'
######################### VALIDAR IP ##############################################
echo 'Informe o número de IP';
read IP
echo $IP | egrep '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$' && echo -e '\033[01;32m IP válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse IP.\033[0m'
######################### VALIDAR CEP ##############################################
echo 'Informe o CEP';
read CEP
echo $CEP | egrep '^[0-9]{5}[-][0-9]{3}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'
######################### VALIDAR DATA formato dd/mm/aaaa ##############################################
echo 'Informe a Data.Formato dd/mm/aaaa';
read DATA
echo $DATA | egrep '^[0-3]{1}[0-9]{1}[/][0-1]{1}[0-9]{1}[/][0-9]{4}$' && echo -e '\033[01;32m Data válida! \033[0m' || echo -e '\033[01;31m NÃO é válida essa Data.\033[0m'
######################### VALIDAR E-MAIL ##############################################
echo 'Informe o E-mail';
read EMAIL
echo $EMAIL | egrep '^([a-zA-Z0-9_-.])+@[0-9a-zA-Z.-]+\.[a-z]{2,3}$' && echo -e '\033[01;32m E-mail válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse E-mail.\033[0m'

Curso Extremamente Avançado em Shell Script Bash

Você irá descobrir técnicas avançadas de escrever em Shell Script. Como criar instaladores para distribuições Linux, Animações, Documentações, além de tudo sobre Processos em sistemas tipo UNIX, detalhes sobre Comandos Avançados e Muito Mais !