BASH tips: Expressões regulares no bash

BASH tips: Expressões regulares no bash

12/04/2016 Marcos Paulo de Souza 1 min de leitura

Como hoje tive de utilizar expressões regulares no bash, pensei em compartilhar com nossos amigos leitores. O buteco já fez um post sobre a utilização de expressões regulares em C, e este artigo vem para complementar. Vamos ao exemplo abaixo:


#!/bin/bash
string="buteco"
if [[ $string =~ but(e)(co) ]]; then
        echo "${BASH_REMATCH[1]}"
        echo "${BASH_REMATCH[2]}"
        echo "${BASH_REMATCH}"
fi

Output:


e
co
buteco

O operador =~ tem a mesma precedência de == e !=. Sendo um operador binário, ele espera uma expressão regular no operador da direta e o aplica no operador da esquerda. Se a expressão regular efetuar match, o valor de retorno é zero. Caso a expressão regular não match, retornará 1, e se houver algum problema na expressão o valor retornado é 2.

Seguem mais exemplos do uso deste operador Extraindo um session ID:


string="SID=eaee6285-4325-4e44-bc5a-f02b4b829d46"
if [[ $string =~ SID=([a-zA-Z0-9-]+) ]]; then
        echo "SID inteiro: ${BASH_REMATCH}"
        echo "Somente o hash: ${BASH_REMATCH[1]}"
fi

Output:


SID inteiro: SID=eaee6285-4325-4e44-bc5a-f02b4b829d46
Somente o hash: eaee6285-4325-4e44-bc5a-f02b4b829d46

Extraindo partes de um arquivo:


if [[ $(cat /proc/version) =~ version[[:space:]]([0-9+]).([0-9]+).([0-9]+) ]]
then
        echo "Version: $(cat /proc/version)"
        echo "Version major: ${BASH_REMATCH[1]}"
        echo "Version minor: ${BASH_REMATCH[2]}"
        echo "Version micro: ${BASH_REMATCH[3]}"
fi

Output:


Version: Linux version 4.4.6-300.fc23.x86_64 ([email protected]) (gcc version 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC) ) #1 SMP Wed Mar 16 22:10:37 UTC 2016
Version major: 4
Version minor: 4
Version micro: 6

Espero que tenham gostado desta dica. Se você gostou desta dica, deixe seu comentário abaixo! Até a próxima!

Referência: Bash Reference