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'