【问题标题】:Bash regex with hyphen and dot带有连字符和点的 Bash 正则表达式
【发布时间】:2019-03-27 12:58:43
【问题描述】:

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

#!/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]$

【问题讨论】:

  • 使用re=',[a-zA-Z0-9_.-]+'
  • 请注意,您可以将[a-zA-Z0-9] 替换为[[:alnum:]]

标签: regex bash shell


【解决方案1】:

由于“转义”字符以及 - 不在括号表达式的结尾/开头,您的模式失败了。 \ 始终被视为括号表达式内的文字反斜杠,它们不形成任何转义序列。连字符很棘手,请参阅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}

【讨论】:

  • 不会,[a-zA-Z0-9_\-]+ 也匹配,m1si-ngxi-ddb01
  • @User123 它将匹配,m1si-ngxi-ddb01,但它匹配will also match ,\m1si-ngxi-ddb01
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 2013-10-21
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多