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
Caracter | Descriçã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' |
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
#!/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'