如何在shell中拆分字符串

XYZ*_*nux 3 regex string bash shell

我有一个变量

string="ABC400p2q4".
Run Code Online (Sandbox Code Playgroud)

我怎么能分开ABC400p2q4.我需要将它分成两个变量,以便得到结果

echo $var1
ABC400
echo $var2
p2q4
Run Code Online (Sandbox Code Playgroud)

代替ABC,可以有任何字母字符; 代替400,可以有任何其他数字; 但是p并且q是固定的,代替2和4,也可以有任何数字.

Chr*_*our 5

无需基于正则表达式模式进行拆分,因为它们是固定长度的子串.纯粹bash你会做:

$ string="ABC400p2q4"

$ var1=${string:0:6}

$ var2=${string:6}

$ echo $var1
ABC400

$ echo $var2
p2q4
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 5

使用和特殊BASH_REMATCH数组(非固定长度):

$ string='ABC400p2q4'
$ [[ $string =~ ^([a-zA-Z]+[0-9]+)(.*) ]]
$ echo ${BASH_REMATCH[1]}
ABC400
$ echo ${BASH_REMATCH[2]}
p2q4
Run Code Online (Sandbox Code Playgroud)