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}\)' )