Quando falei sobre análise de logs, citei as expressões regulares como recurso que pode potencializar as pesquisas em arquivos texto. As expressões regulares, que doravante a chamaremos por sua forma mais conhecida na internet, regex, são métodos de identificação de cadeia de caracteres que, através de padrões, possibilitam a realização de pesquisa por um determinado texto em função de variáveis conhecidas. Estas expressões são escritas com símbolos dotados de funções específicas, denominados de metacaracteres.
Os metacaracteres delimitam as condições que serão utilizadas pela expressão regular para realizar a pesquisa e cada um deles tem uma função específica. Listaremos em seguida os principais e sua respectiva função, exemplificando seu uso logo em seguida, utilizando o comando grep do Unix/Linux. O comando grep tem a seguinte sintaxe:
grep [opções] ‘[regex]’ [arquivo]
Nos exemplos que mostraremos, utilizamos a opção “-e” que indica o uso de uma expressão regular básica ou “-E” que indica o uso de uma expressão regular estendida.
1. Metacaracteres representantes – Representam os caracteres que serão utilizados como chave da pesquisa.
Metacaractere | Função |
---|---|
. (Ponto) | Qualquer caractere |
[abc] | Limita os caracteres à lista entre colchetes |
[^abc] | Exclui os caracteres entre colchetes |
[\] | Torna um metacaractere um caractere normal |
Obs.: O arquivo utilizado nos exemplos a seguir pode ser baixado aqui ou ao fim do post.
O comando abaixo lista todas as linhas que contém a letra “m” seguida de “a”, “e” ou “i”.
$ grep -e 'm[aei]' nomes.txtAmanda Benjamin Camila Emanuel Emanuelly Emily Guilherme João Guilherme Kamilly Luiz Guilherme Yasmin
O circunflexo dentro da lista exclui os valores “a”, “e” e “i”. Logo o comando seguinte lista linhas contendo a letra minúscula “m” seguida de qualquer outro caractere, excluindo a”, “e” e “i”.
$ grep -e 'm[^aei]' nomes.txtSamuel Tomás
2. Metacaracteres posicionadores ou âncoras – Indicam em que posição a pesquisa será realizada
Metacaractere | Função |
---|---|
^ | Posiciona a pesquisa no início da linha |
$ | Posiciona a pesquisa no final da linha |
\b | Posiciona a pesquisa para o início ou final da palavra |
\< | Posiciona a pesquisa para o início da palavra |
[/<] | Posiciona a pesquisa para o início da palavra |
[/>] | Posiciona a pesquisa para o final da palavra |
O próximo comando lista todas a linhas que começam com as letras maiúsculas “A”, “B” ou “C” que não sejam seguidas dos caracteres “a”, “e”, “l”, “n” ou “r” minúsculos.
$ grep -e ‘^[ABC][^aelnr]’ nomes.txtAgatha Amanda Augusto Bárbara Bianca
Este lista as linhas que terminam na letra “i” minúscula
$ grep -e ‘i$’ nomes.txtDavi Giovanni Levi Yuri
Este outro lista as linhas que possuem a palavra “Yuri”
$ grep -e ‘\bYuri\b’ nomes.txtYuri
O comando seguinte lista as linhas que têm palavras começando com “fe” ou “Fe”
$ grep -e ‘\<[Ff]e’ nomes.txtFelipe Fernanda Fernando Luiz Felipe Luiz Fernando Maria Fernanda
3. Metacaracteres quantificadores – Como o próprio nome indica, os metacaracteres quantificadores definem a quantidade de vezes que são utilizados para definir com que repetição.
Metacaractere | Função |
---|---|
? | Caractere opcional |
* | Qualquer quantidade, inclusive zero |
+ | Uma ou mais vezes |
{n} | Exatamente “n” vezes |
{n,} | Pelo menos “n” vezes |
{n,m} | Entre “n” e “m” vezes |
O comando abaixo pesquisa por linhas que tenham a palavras com “ll”
$ grep -E 'l{2}' nomes.txtAntonella Emanuelly Gabrielly Isabella Isabelle Kamilly Mirella Stella
4. Outros metacaracteres
Metacaractere | Função |
---|---|
| | Alterna opções |
– | Indica um intervalo |
(a|b) | Delimita o escopo de opções |
\B | Alternativa para \\ (escapa a “\”) |
\w | Caracteres alfa-numéricos e underscore [A-Za-z0-9_] |
\W | Caracteres não alfa-numéricos |
O Glogg como o Log Expert aceitam expressões regulares, que potencializam os efeitos da pesquisa, mas elas não ficam só nisso, o assunto é muito mais amplo do que o que vimos aqui e quem quiser expandir seus conhecimentos pode consultar as referências a seguir entre tantas outras:
- Aurélio Marinho Jargas. Expressões Regulares – Uma Abordagem Divertida . 3ª ed.: Novatec, 2009
- Jeffrey Friedl. Mastering Regular Expressions. 3ª ed.: O’Reilly