Linux expressoes regulares mais exemplos. Vou usar grep e grep -E.
—
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
grep -E [OPÇÕES] expressão_regular arquivo
—
Expressão Regular = texto/strings
Caracter Descrição REGEX
. 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/Coringas – Arquivo/Pasta
. casa com qualquer caracter uma vez
.* casa com qualquer caracter várias vezes
(esse|aquele) Casa as palavras ‘esse’ ou ‘aquele’
—
Eu criei uma pasta chamada TESTES e nela um arquivo de texto chamado passwd. Leio o que tem nele:
TESTES:$ cat ~/TESTES/passwd
23/03/2020
user:dodo:6625:false
baba Shell:sese:shell
user:bash:shell:5959:bash
ipopi:bash:mumu:bash
bobob:bash:pepe:shell
lelel:shell:dede:bash
ododo:shell:Wewe:bash
lolol:Bash:dodo:shell
aveve:bash:Pepe:bash
ioio:bash:7694:false:bash
kekek:Shell:5813:false:bash
Aveve:bash:Pepe:4906:bash
user:false:popi:opepe:bash
dede:yuyu:popo:shell
vivi:55288:eionc:shell
linux:dada:ngng:8592:shell:bash
unix:drtdrt:bgfbgf:3856:shell
a1:eses:1524:uiop:bash
b2:rere:5143:poiu:shell
e3:wewe:2431:uiop:linux
r5:aeae:5134:poiu:bash
h4:gege:2435:uiop:unix
User:false:popi:opepe:bash
—
Exemplos
—
Procura a palavra user no arquivo ~/TESTES/passwd
~:$ grep user ~/TESTES/passwd
—
Procura todas as linhas começadas pela letra u no arquivo:
~:$ grep ‘^u’ ~/TESTES/passwd
—
Procura todas as linhas terminadas pela palavra false no arquivo:
~:$ grep ‘false$’ ~/TESTES/passwd
—
Procura todas as linhas começadas pelas vogais no arquivo:
~:$ grep ‘^[aeiou]’ ~/TESTES/passwd
—
Procura todas as linhas começadas por qualquer caracter e segundo caracter seja qualquer vogal no arquivo:
~:$ grep ‘^.[aeiou]’ ~/TESTES/passwd
—
Procura todas as linhas que contenham uma sequência de 4 números consecutivos:
~:$ grep ‘[0-9][0-9][0-9][0-9]’ ~/TESTES/passwd
—
Comando para encontrar linhas em branco:
~:$ grep ‘^$’ ~/TESTES/passwd
—
Encontrar e contar linhas em branco:
~:$ grep ‘^$’ ~/TESTES/passwd | wc -l
—
Encontrar mesmo nome, porém com letra inicial minúscula e maiúscula:
grep ‘[Uu]ser’ ~/TESTES/passwd
—
Encontrar 27 sequência ^ de 27 caracteres:
~:$ grep -E ‘^.{27}$’ ~/TESTES/passwd
—
Note que foi usado o grep -E e não o grep. É porque as chaves fazem parte de um conjunto avançado de Expressões Regulares (“extended”), então o grep -E lida melhor com elas. Se fosse para usar o grep normal, teria que “escapar” as chaves.
—
~:$ grep ‘^.\{27\}$’ ~/TESTES/’Linux shell script tomar decisoes.txt’
—
~:$ grep -E ‘^.{20,40}$’ ~/TESTES/passwd
—
Para obter as linhas que possuem 40 caracteres ou mais:
~:$ grep -E ‘^.{40,}$’ ~/TESTES/passwd
—
Econtrar números com 3 dígitos (de 0 a 9) ou mais:
grep -E ‘[0123456789]{3,}’ ~/TESTES/passwd
—
~:$ grep -E ‘[0123456789]{3,}’ ~/TESTES/passwd
—
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 “.”):
TESTES:$ grep -E ‘^[aeiou].*bash$’ ~/TESTES/passwd
ipopi bash:mumu bash
ododo shell:wewe bash
aveve bash:pepe bash
—
Procura linhas que comecem com a palavra ‘e3’ ou ‘vivi’ ou ‘user’:
grep -E ‘^(e3|vivi|user)’ ~/TESTES/passwd
—
Procura todas as linhas que NÃO comecem com a letra minúscula ‘m’
grep -E ‘^[^mumu]’ ~/TESTES/passwd
—
Continuo a brincar alterando exemplos.
—
Cola comandos: