Bash脚本中的正则表达式

时间:2013-06-10 16:02:33

标签: regex linux bash expression

Hello awesome community,

关于正则表达式,我是一个完整的涂料。我推迟了学习......现在我的懒惰已经赶上了我。

我想做的事情:
检查字符串是否与此格式匹配:

10_06_13

即。今天的日期,或类似日期的" 2digits_2digits_2digits"

我做了什么:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

这在一定程度上起作用。但是当传入的字符串等于011_100_131时......它仍然通过了正则表达式检查。

如果有人能帮助我指出正确的方向,我将不胜感激 干杯

1 个答案:

答案 0 :(得分:43)

如果左侧中的字符串包含右侧正则表达式的匹配项,则

=~成功。如果你想知道字符串是否匹配正则表达式,你需要在两边“锚定”正则表达式,如下所示:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

^仅在字符串的开头成功,而$仅在结尾处成功。

注意:

  1. 我从正则表达式中删除了不必要的(),从""删除了[[ ... ]]
  2. bash手册的措辞很差,因为它表示如果字符串匹配,=~会成功。