Evolua seus conhecimentos em Linux aprendendo um pouco mais sobre expressões regulares (RegEx) neste artigo!
As Expressões Regulares (RegEx) está presente em diversas linguagens de programação e mecanismos de buscas, com elas você pode definir expressões mais complexas na hora de criar filtros em scripts. Nesse artigo você aprenderá as principais regras de sintaxe da RegEx e suas aplicações em Linux e Shell Scripting. Vamos lá?
O que é RegEx?
RegEx se refere a Regular Expression, ou expressão regular, esta é uma ferramenta muito útil na hora de se realizar buscas por certos padrões de texto podendo ser utilizado em diversas linguagens de programação.
Com as expressões regulares você utiliza alguns caracteres especiais que representam uma variedade de opções pro seu filtro, permitindo realizar buscas complexas e mais abrangentes de forma simplificada e compacta.
Apesar de se poder utilizar da RegEx em diversas linguagens, nesse artigo você verá alguns exemplos de RegEx aplicado com comandos de Shell.
Como usar expressões regulares
Existem diversas regras caracteres especiais para a utilização das expressões regulares e para ficar mais claro o entendimento dessas regras utilizaremos um arquivo de exemplo que será mencionado no artigo como arquivo.txt
e utilizaremos da RegEx para filtrar conteúdos nele. Este é o conteúdo do arquivo.txt
:
O gato perseguiu o rato
O rato correu do gato
o rato fugiu pro mato
o Gato pegou o Rato
Filtrando por termos no início e fim da linha
Em RegEx, você pode consultar por termos que estejam no final ou início da linha utilizando os seguinte caracteres:
^
= Representa o início da linha.$
= Representa o final da linha.
A sintaxe pode ser utilizada da seguinte maneira:
egrep ^O arquivo.txt
egrep
= o comandoegrep
funciona como ogrep
, porém, ele interpreta a sintaxe de expressões regulares também.^O
= isso filtra noarquivo.txt
todas as linhas que comecem comO
maiúsculo.arquivo.txt
= arquivo de exemplo mencionado anteriormente.
Outra forma de aplicação é com termos no final da linha utilizando o caractere dólar, veja o exemplo:
egrep rato$ arquivo.txt
rato$
= oegrep
nesse caso vai localizar somente as linhas que possuamrato
como último termo da linha. Pelo exemplo abaixo perceba que ele não corresponde com a linha que possuiRato
como último termo, por conta da letra maiúscula.
Filtrando termos dentro de um array
Outra possibilidade de utilização da RegEx é definir um array (um intervalo) de caracteres utilizando colchetes. Veja o exemplo:
egrep [gmr]ato$ arquivo.txt
[gmr]ato$
= esse código vai procurar noarquivo.txt
qualquer linha que possua como último termogato
,
oumato
rato
Ao utilizar o caractere -
dentro dos colchetes, é possível definir um intervalo inteiro do alfabeto. Veja o exemplo:
egrep [a-z]ato arquivo.txt
[a-z]ato
= esse código vai procurar noarquivo.txt
qualquer linha que possua o termoato
com um caractere que vai dea
atéz
precedendo o termoato
. Note que nesse exemplo o código não corresponde com letra maiúsculas.
Filtrando termos maiúsculos e minúsculos
Para que a busca localize termos independente se for maiúsculo ou minúsculo também é possível fazer utilizando os colchetes. Veja o exemplo:
egrep [rR]ato$ arquivo.txt
[rR]ato$
= esse código vai procurar noarquivo.txt
qualquer linha que possua como último termorato
ouRato
.
Além disso, é possível combinar tudo que aprendemos até agora para definirmos um filtro de caracteres de maiúsculas e minusculas num array com o -
. Veja o exemplo:
egrep [aA-zZ]ato arquivo.txt
=[Aa-Zz]ato$
[rR]ato$
= esse código vai procurar noarquivo.txt
qualquer linha que possua o termoato
precedido por qualquer caractere deA
aZ
independente se for maiúsculo e minusculo.
Além disso, também é possível definir um array para filtrar dígitos numéricos. Por exemplo, [1-4]
vai filtrar na linha resultados com o termo 1, 2, 3 ou 4
.
Filtrando utilizando caracteres curingas
Outra opção no RegEx é utilizar curingas para definir seu filtro, para isso é utilizado os caracteres:
.+
= representa um ou mais caracteres.?
= representa zero ou um caractere.*
= representa qualquer caractere
Veja um exemplo de utilização do
.+
:
egrep O.+ arquivo.txt
= esse código vai procurar noO.+
arquivo.txt
qualquer linha que possua o termoO
seguido de um ou mais caracteres.
Veja um exemplo de utilização do .?
:
egrep .?ato arquivo.txt
= esse código vai procurar no.?ato
arquivo.txt
qualquer linha que possua o termoato
com um ou nenhum caractere precedendo o termo.
Veja um exemplo de utilização do .*
:
egrep eg.* arquivo.txt
= esse código vai procurar noeg.*
arquivo.txt
qualquer linha que possua o termoeg
seguido de qualquer ou nenhum caractere.
Filtrando para diferentes termos
Também é possível filtrar em um termo utilizando o caractere |
(pipe) que abrange um termo para mais possibilidades. Veja o exemplo:
egrep "(persegu|fug)iu" arquivo.txt
= esse código vai procurar no"(persegu|fug)iu"
arquivo.txt
qualquer linha que possua o termo
OUperseguiu
.fugiu
Considerações Finais
Estas foram algumas das principais e mais utilizadas regras de expressões regulares no Linux, você pode conferir mais opções e variações da RegEx no manual oficial.
Se você sentiu alguma dificuldade ou então tem alguma sugestão de algo que não foi mencionado, basta deixar aí nos comentários que no futuro podemos estar trazendo atualizações para este artigo. Também indico esses outros materiais relacionados com este assunto:
Até a próxima! :^)