Como usar expressões regulares em shellscript
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 regular casa com qualquer string que ela define.
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 regular especificada, na saída padrão.
A sintaxe básica do comando grep é a seguinte:
[grep [opções] regex [arquivo...]]
- regex: é a expressão regular 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 regular.
- -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 Similar 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 regular:
- Expressão regular básica: ^ $ . [ ] * \
- Expressão regular estendida: ? + ( ) { } |
- Expressão Regular: / .alk/
- Casamento: espaço + qualquer caractere + "alk"
- Exemplos:
- will talk
- may balk
- Expressão Regular: /.ing/
- Casamento: qualquer caractere + "ing"
- Exemplos:
- sing song
- ping
- Expressão Regular: /[bB]ill/
- Casamento: "b" ou "B" + "ill"
- Exemplos:
- bill
- Bill
- billed
- Expressão Regular: /t[aeiou].k/
- Casamento: "t" + qualquer vogal + qualquer caractere + "k"
- Exemplos:
- talkative
- stink
- Expressão Regular: /[^a–zA–Z]/
- Casamento: Qualquer caractere que não é uma letra
- Exemplos:
- 1
- @
- Exemplo:
- Expressão Regular: /ab*c/
- Casamento: "a" + zero ou mais "b" + "c"
- Exemplos:
- ac
- abc
- debbcaabbbc
- Expressão Regular: /t.*ing/
- Casamento: "t" + qualquer sequência de caracteres + "ing"
- Exemplos:
- thing
- ting
- thought of going
- Expressão Regular: /^T/
- Casamento: Um "T" no começo da linha
- Exemplos:
- This line
- That time
- Expressão Regular: /^+[0-9]/
- Casamento: Um sinal de mais (+) seguido de um dígito no início da linha
- Exemplos:
- +5
- +759
- Expressão Regular: /:$/
- Casamento: Um dois pontos no final da linha
- Exemplos:
- ...bellow:
- Expressão Regular: /end\./
- Casamento: "end" seguido por um ponto literal
- Exemplos:
- The end.
- send.
- Expressão Regular: /\*/
- Casamento: Um asterisco literal
- Exemplos:
- *.c
- um asterisco (*)
- Expressão Regular: /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 Regular: \([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 regular 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) is not what it once was (a long time ago), is it?"
- Expressão Regular: /Th.*is/
- Resultado: A expressão casa com "This (rug) is not what it once was (a long time ago), 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 Regular: /(.*)/
- Resultado: A expressão casa com "This (rug) is not what it once was (a long time ago), 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 more and more"
- Expressão Regular: /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 Regular: /s.*ing song/
- Resultado: A expressão casa com "singing song".
- Explicação: O padrão casa a maior sequência que começa com "s" e inclui "ing song", capturando apenas a primeira ocorrência de "singing song".
COMENTÁRIOS