Este artigo faz parte do projeto #LTCode
Expressões regulares são notações usadas para identificar padrões em textos. Portanto uma expressão common casa com qualquer string que ela outline.
Expressões regulares são suportadas por vários programas em linha de comando e por muitas linguagens de programação para facilitar a resolução de problemas de manipulação de textos. O comando grep é uma ferramenta poderosa e amplamente usada para buscar por expressões regulares em arquivos de texto. Ele imprime as linhas que casam com a expressão common especificada, na saída padrão.
A sintaxe básica do comando grep é a seguinte:
[grep [opções] regex [arquivo…]]
- regex: é a expressão common que você deseja buscar.
- arquivo…: são os arquivos onde você quer realizar a busca (opcional).
- -i Ignora a distinção entre maiúsculas e minúsculas na busca.
- -v Inverte o casamento, mostrando todas as linhas que não contêm a expressão common.
- -c Mostra o número de casamentos (ou não-casamentos, quando usado com -v).
- -l Exibe apenas os nomes dos arquivos que contêm a expressão casada, sem exibir o conteúdo das linhas.
- -L Related a -l, mas mostra os arquivos que não contêm a expressão.
- -n Prefixa cada linha casada com o número da linha em que ela aparece no arquivo.
- -h Para pesquisas em múltiplos arquivos, suprime o nome do arquivo na saída.
Até agora, você pode ter utilizado o grep para buscar strings fixas, mas ele também suporta expressões regulares, permitindo buscas muito mais poderosas. Vamos agora entender o que compõe uma expressão common:
- Expressão common básica: ^ $ . [ ] *
- Expressão common estendida: ? + ( ) { } |
- Expressão Common: / .alk/
- Casamento: espaço + qualquer caractere + “alk”
- Exemplos:
- will speak
- might balk
- Expressão Common: /.ing/
- Casamento: qualquer caractere + “ing”
- Exemplos:
- sing tune
- ping
- Expressão Common: /[bB]ailing/
- Casamento: “b” ou “B” + “ailing”
- Exemplos:
- invoice
- Invoice
- invoiceed
- Expressão Common: /t[aeiou].okay/
- Casamento: “t” + qualquer vogal + qualquer caractere + “okay”
- Exemplos:
- speakative
- stink
- Expressão Common: /[^a–zA–Z]/
- Casamento: Qualquer caractere que não é uma letra
- Exemplos:
- 1
- @
- Exemplo:
- Expressão Common: /ab*c/
- Casamento: “a” + zero ou mais “b” + “c”
- Exemplos:
- ac
- abc
- debbcaabbbc
- Expressão Common: /t.*ing/
- Casamento: “t” + qualquer sequência de caracteres + “ing”
- Exemplos:
- factor
- ting
- considered going
- Expressão Common: /^T/
- Casamento: Um “T” no começo da linha
- Exemplos:
- This line
- That time
- Expressão Common: /^+[0-9]/
- Casamento: Um sinal de mais (+) seguido de um dígito no início da linha
- Exemplos:
- +5
- +759
- Expressão Common: /:$/
- Casamento: Um dois pontos no closing da linha
- Exemplos:
- …bellow:
- Expressão Common: /finish./
- Casamento: “finish” seguido por um ponto literal
- Exemplos:
- The finish.
- sfinish.
- Expressão Common: /*/
- Casamento: Um asterisco literal
- Exemplos:
- *.c
- um asterisco (*)
- Expressão Common: /a(b*)c/
- Casamento: Esta expressão casa com as mesmas strings que /ab*c/, mas o conteúdo entre “a” e “c” pode ser recuperado como um grupo separado.
- Exemplos:
- ac
- abc
- abbc
- Expressão Common: ([a–z]([A–Z]*)x)
- Casamento: Essa expressão casa com um padrão onde uma letra minúscula é seguida por uma sequência de letras maiúsculas, seguida por “x”.
- Exemplos:
- Para a string “3 t dMNORx7 l u”, a expressão common casa com dMNORx, onde:
- O primeiro agrupamento ([a–z][A–Z]*x) casa com dMNORx.
- O segundo agrupamento interno ([A–Z]*) casa com MNOR`.
- Frase: “This (rug) will not be what it as soon as was (a very long time in the past), is it?”
- Expressão Common: /Th.*is/
- Resultado: A expressão casa com “This (rug) will not be what it as soon as was (a very long time in the past), is”.
- Explicação: A expressão começa com “Th” e, devido ao .*, continua até o último “is” encontrado, casando a sequência mais longa possível entre “Th” e “is”.
- Expressão Common: /(.*)/
- Resultado: A expressão casa com “This (rug) will not be what it as soon as was (a very long time in the past), is it?”.
- Explicação: O padrão .* dentro de parênteses escapados captura a sequência mais longa possível, o que neste caso é a linha inteira.
- Frase: “singing songs, singing increasingly more”
- Expressão Common: /s.*ing/
- Resultado: A expressão casa com “singing songs, singing”.
- Explicação: Começando com “s”, o padrão .* continua até o último “ing” encontrado, capturando a sequência mais longa que casa com “s” até “ing”.
- Expressão Common: /s.*ing tune/
- Resultado: A expressão casa com “singing tune”.
- Explicação: O padrão casa a maior sequência que começa com “s” e inclui “ing tune”, capturando apenas a primeira ocorrência de “singing tune”.