在shell中使用模式匹配进行解析

在shell中使用模式匹配进行解析,shell,pattern-matching,Shell,Pattern Matching,我试图使用reqex,模式匹配,将这个字符串分割成单独的变量,abc12c20m。其中: var1=abc var2=12 var3=20 expabc2c5m的主字符串可能不同,但abc部分始终相同,c和m始终在字符串中。一种解决方案必须同时适用于abc12c20m和abc2c5m 任何帮助都将不胜感激 您可以使用BASH正则表达式: s='abc12c20m' if [[ "$s" =~ ^(abc)([0-9]+)c([0-9]+)m$ ]]; then var1=${BASH

我试图使用reqex,模式匹配,将这个字符串分割成单独的变量,abc12c20m。其中:

var1=abc
var2=12
var3=20
expabc2c5m的主字符串可能不同,但abc部分始终相同,cm始终在字符串中。一种解决方案必须同时适用于abc12c20mabc2c5m


任何帮助都将不胜感激

您可以使用BASH正则表达式:

s='abc12c20m'
if [[ "$s" =~ ^(abc)([0-9]+)c([0-9]+)m$ ]]; then 
    var1=${BASH_REMATCH[1]}
    var2=${BASH_REMATCH[2]}
    var3=${BASH_REMATCH[3]}
fi

echo "$var1 - $var2 - $var3"
abc - 12 - 20

您可能没有使用BASH。请确保使用bash进行此解析。/arry_test.sh:第42行:条件表达式中的语法错误:意外标记('./arry_test.sh:第42行:靠近^(a.)的语法错误。/arry_test.sh:第42行:`if[“$s”=~^(abc)([0-9]+)c([0-9]+)m$]];然后',如果“abc”部分更改为“cba”呢?@fali,如果abc零件更改为cba,您必须在问题中指定它。此外,此解决方案工作正常。@fali:try:
read var1 var2 var3<