Cadeia de condição corresponde a reg.expression

2

Portanto, no meu script, preciso decidir se um dos parâmetros é um endereço de e-mail válido. Eu estava tentando, mas falhou.

if $maddr="^.$*\(@\)\(*\)\(.\)\(??*\)"

then
...

Significa: pelo menos 1 caractere seguido por @ seguido por qualquer coisa seguido por um ponto e seguido por algo que tenha pelo menos 2 caracteres.

    
por Wanderer 28.04.2014 / 23:51

2 respostas

4

A ferramenta Unix para corresponder uma string a um regexp é expr :

if expr "$maddr" : '..*@.*\...' > /dev/null; then...

(observe que expr regexps estão implicitamente ancorados no começo)

Embora, neste caso, a correspondência simples de padrões de shell seja suficiente:

case $maddr in
  ?*@*.??*) ...
esac

Observe que alguns shells, como zsh , ksh93 e bash , incorporaram operadores de correspondência regexp como uma extensão acima da sintaxe sh padrão, mas a sintaxe varia ligeiramente entre eles.

pattern='.@.*\...'
if [[ $maddr =~ $pattern ]]; then...

Deve funcionar nos três.

(observe que esses padrões não garantem um endereço de e-mail válido).

    
por 29.04.2014 / 00:00
1
_vaddr() { { cat
    printf %s\n "$@"
} | grep -o '[^ ]*@[^ ]*' |
    grep -q "$REGEX" && {
        $DO_SUCCESS
        } || $HANDLE_FAILURE
}
    
por 29.04.2014 / 02:11