![条件字符串与 reg.expression 匹配](https://linux22.com/image/53740/%E6%9D%A1%E4%BB%B6%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%8E%20reg.expression%20%E5%8C%B9%E9%85%8D.png)
因此,在我的脚本中,我必须确定其中一个参数是否是有效的电子邮件地址。我尝试过,但失败了。
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
}