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