Bash正则表达式带连字符和点

时间:2019-03-27 12:58:43

标签: regex bash shell

我正在尝试将主机名与正则表达式匹配。 由于某些原因,以下代码失败。

#!/bin/bash 
CONFIGURATION=m1si-ngxi-ddb01

#check configuration format
TMP_CONFIGURATION=",${CONFIGURATION}"
re=',[a-zA-Z0-9\-_\.]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
        echo "configuration parttern mismatch."
        exit 1
fi

测试:

[oracle@m1s-nyyy-db01 nir]$ vi a.sh
[oracle@m1s-nyyy-db01 nir]$

1 个答案:

答案 0 :(得分:3)

由于“转义”的字符和-不在括号表达式的末尾/开始的事实,您的模式失败了。 \在方括号表达式中始终被视为文字反斜杠,它们不构成任何转义序列。连字符比较棘手,请参见9.3.5 RE Bracket Expression,第7点:

  

如果<hyphen-minus>字符出现在列表中的第一个字符(如果有首个'^'之后)或最后出现,或在范围表达式中作为结束范围点,则应将其视为自身。

使用

CONFIGURATION=m1si-ngxi-ddb01
#check configuration format
TMP_CONFIGURATION=",$CONFIGURATION"
re=',[a-zA-Z0-9_.-]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
        echo "configuration parttern mismatch."
        exit 1
fi

请参见online demo。请注意,无需将CONFIGURATION放在花括号内,$CONFIGURATION = ${CONFIGURATION}