如何在case语句中正确匹配以下消息ID格式

时间:2012-07-09 15:05:28

标签: regex bash case

我正在尝试在case语句中使用此正则表达式模式以匹配特定类型的ID,这可以传递给脚本。我需要将字母数字字符的确切数字与短划线进行匹配,以便将此消息ID与其他任何内容区分开来,这可以传递给此bash脚本。

邮件ID格式的示例:c7c3e910-c9d2-71e1-0999-0aec446b0000

#!/bin/bash
until [ -z "$1" ]
 do
    case "$1" in
    "")
        echo "No value passed"
        ;;
    [a-z0-9]\{8\}-[a-z0-9]\{4\}-[a-z0-9]\{4\}-[a-z0-9]\{4\}-[a-z0-9]\{12\})
        echo "Found message ID: $1"
        ;;
    *)
        echo "Server $1"
        ;;
    esac
    shift 
done

1 个答案:

答案 0 :(得分:4)

UUID由十六进制数字组成。

Case语句接受glob样式模式,而不是正则表达式(方括号中的字符范围可以,但花括号中的量词不起作用)。

您可以使用Bash正则表达式匹配来测试字符串。

pattern='[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}'
if [[ $1 =~ $pattern ]]
then
    echo "found"
fi