Regex 如何在shell中拆分字符串

Regex 如何在shell中拆分字符串,regex,string,bash,shell,Regex,String,Bash,Shell,我有一个变量 string="ABC400p2q4". 如何将ABC400和p2q4分开。 我需要把它分成两个变量,这样我才能得到 echo $var1 ABC400 echo $var2 p2q4 可以使用任何字母字符代替ABC;400可以是任何其他数字;但是p和q是固定的,在2和4的位置上可以有任何数字。尝试这样做 使用&(非固定长度): 注 sed命令中的&表示替换的匹配左侧部分s// 输出 不需要基于regexp模式进行拆分,因为它们是固定长度的子字符串。在purebash中,您将执

我有一个变量

string="ABC400p2q4".
如何将
ABC400
p2q4
分开。 我需要把它分成两个变量,这样我才能得到

echo $var1
ABC400
echo $var2
p2q4

可以使用任何字母字符代替ABC;400可以是任何其他数字;但是
p
q
是固定的,在2和4的位置上可以有任何数字。

尝试这样做 使用&(非固定长度):

sed
命令中的
&
表示替换的匹配左侧部分
s//

输出
不需要基于regexp模式进行拆分,因为它们是固定长度的子字符串。在pure
bash
中,您将执行以下操作:

$ string="ABC400p2q4"

$ var1=${string:0:6}

$ var2=${string:6}

$ echo $var1
ABC400

$ echo $var2
p2q4
使用和特殊
BASH\u重新匹配
数组(非固定长度):


sudo_O提供的答案是完美的,如果你的琴弦保持单一长度。但是,如果不是这样的话,bash确实为您提供了


用实际需要的任何东西替换正则表达式。

什么shell?至少有几十种。其他价值观呢;拆分的标准是什么?是前6个字符还是后4个字符(但如果长度不是10,会发生什么情况)?是ABC加3位数还是尾随物料?是3个大写字母、3个数字和尾随材料吗?它在第一个“p”之前分开吗?对于您指定的任务:
var1=ABC400;var2=p2q4
完成任务,没有混乱,没有麻烦。信息太少。你的字符串有任何模式/规则吗?代替ABC可以有任何albhabet,代替400可以有任何其他数字bt p和q是固定的,代替2和3也可以有任何数字。+1表示空间概念。从他的描述来看,我觉得这也行吗
sed-r的/([0-9])p/\1p/'
像在Perl中一样,有多种方法可以做到这一点=)也添加了您的解决方案
read var1 var2 <<< $(sed -r 's/^[a-zA-Z]+[0-9]+/& /' <<< 'ABC400p2q4')
's/([0-9])p/\1 p/'
$ echo $var1
ABC400
$ echo $var2
p2q4
$ string="ABC400p2q4"

$ var1=${string:0:6}

$ var2=${string:6}

$ echo $var1
ABC400

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

$ var1=$( expr match "$string" '\(.{6}\)' )

$ var2=$( expr match "$string" '.*\(.{4}\)' )