条件字符串与 reg.expression 匹配

条件字符串与 reg.expression 匹配

因此,在我的脚本中,我必须确定其中一个参数是否是有效的电子邮件地址。我尝试过,但失败了。

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

then
...

它的意思是:至少 1 个字符,后跟 @,后跟任何内容,后跟一个点,再后跟至少 2 个字符的内容。

答案1

将字符串与正则表达式进行匹配的 Unix 工具是expr

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

(请注意,正则expr表达式隐式锚定在开头)

尽管在这种情况下,简单的 shell 模式匹配就足够了:

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

请注意,某些 shell(例如zsh,ksh93和 )bash具有内置正则表达式匹配运算符作为标准sh语法之上的扩展,但这些 shell 之间的语法略有不同。

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

应该适用于所有三个。

(请注意,这些模式不能保证电子邮件地址有效)。

答案2

_vaddr() { { cat
    printf %s\\n "$@"
} | grep -o '[^ ]*@[^ ]*' |
    grep -q "$REGEX" && {
        $DO_SUCCESS
        } || $HANDLE_FAILURE
}

相关内容