在bourne shell脚本中编写正则表达式

时间:2014-12-11 05:16:13

标签: regex shell unix grep sh

我正在编写一个脚本,它只接受某种格式的用户参数。 就像是 MSK16PCF1_SOURCE

即。正好是3个Alpha字符,后跟2或3个数字,后跟3或4个字母数字,然后是_,后跟一些alpha字符。

我写的正则表达式如下。

^[[:alpha:]]{2}[A-Z][[:digit:]]{2,3}[0,9][[:alnum:]]{2}[A-Z]?\_[[:alpha:]]*

但它不起作用。 你能说出需要改变的地方吗?

$ cat swf.sh

vari=MSK16PCF1_SOURCE
if echo "$vari" | grep -q '^[[:alpha:]]{2}[A-Z][[:digit:]]{2,3}[0,9][[:alnum:]]{2}[A-Z]?_[[:alpha:]]*'; then
     echo success
fi

1 个答案:

答案 0 :(得分:1)

这应该满足您的所有需求。

^[[:alpha:]]{3}[[:digit:]]{2,3}[[:alnum:]]{3,4}_[[:alpha:]]*$

在Basic grep中,你需要转义花括号以表示花括号作为复制量词。

^[[:alpha:]]\{3\}[[:digit:]]\{2,3\}[[:alnum:]]\{3,4\}_[[:alpha:]]*$