如何在UNIX中将此regexp与expr匹配?

如何在UNIX中将此regexp与expr匹配?,regex,if-statement,unix,expr,Regex,If Statement,Unix,Expr,一些body pl能否告诉我为什么这个if条件输出不匹配,以及如何使用expr更改reg exp模式以显示匹配的输出。问题是,var变量中可以有任何国家代码,如US或CA,而不是BH。变量中的所有其他字符保持不变 var1="BH.EBS.EBS.BH.RCMS.RCMS.FBACCR" if [ `expr $var1 : "*.EBS.EBS.*.RCMS.RCMS.FBACCR"` -gt 0 ]; then echo "Matched&q

一些body pl能否告诉我为什么这个if条件输出不匹配,以及如何使用expr更改reg exp模式以显示匹配的输出。问题是,var变量中可以有任何国家代码,如US或CA,而不是BH。变量中的所有其他字符保持不变

var1="BH.EBS.EBS.BH.RCMS.RCMS.FBACCR"
if [ `expr $var1 : "*.EBS.EBS.*.RCMS.RCMS.FBACCR"` -gt 0 ]; then
echo "Matched"
else
echo "Not matched"
fi
谢谢
乔塔姆

像这样的东西可以做到:

.\.EBS\.EBS\...\.RCMS\.RCMS\.FBACCR
请记住,原始字符串中的点是regexp中的一种特殊类型的字符,这意味着它们不会被解释为点。它说它可以是任何字符。然后你必须替换它们,因此使用反斜杠

最后,在需要匹配BH的地方,可以使用点。。如果国家/地区代码保证为2个字符长。 如果不是,您可以使用:

.*\.EBS\.EBS\..*\.RCMS\.RCMS\.FBACCR

换句话说,该命令接受POSIX基本正则表达式,但OP试图将其用于shell glob。解决方案是将glob重写为一个兼容的正则表达式。Hi@suimeteo和@other guy Yes国家代码将始终为2个字符。在比较开始的时候,我在*前面加了一个点,看起来很有效。这样做合适吗?var1=“BH.EBS.EBS.BH.RCMS.RCMS.fbacr”如果[
expr$var1:*.EBS.*.RCMS.fbacr”
-gt 0];然后回显“匹配”否则回显“不匹配”fi