我的正则表达式有什么问题

时间:2013-06-13 09:33:47

标签: regex bash shell solaris

我有一个简单的正则表达式,并在十六进制数上测试egrep

regex="^([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2})*$"

当我尝试回显任何输入时,它只是打印Nothing

echo "fe:fe" | egrep $regex

只有使用Solaris Box而不是Linux Box才会出现此问题

在Solaris中

bash-3.2# regex="^([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2})*$"
bash-3.2# echo "fe:fe" | egrep $regex
bash-3.2# 

2 个答案:

答案 0 :(得分:2)

我没有Solaris,但这里仍然是旧的SunOS机器。这里的egrep手册页指出:

  

/ usr / bin / egrep实用程序接受完整的正则表达式        正如regexp(5)手册页中所述,除了...和\ {和\},...

所以你不能使用重复,而是尝试:

regex="^([0-9A-Fa-f][0-9A-Fa-f])(:[0-9A-Fa-f][0-9A-Fa-f])*$"

答案 1 :(得分:2)

使用/usr/xpg4/bin/egrep代替/usr/bin/egrep。前者符合POSIX标准,支持完整的正则表达式。