Как разбить строку в соответствии с регулярным выражением в сценарии bash

У меня есть такая строка:

msg='123abc456def' 

Теперь мне нужно разделить msg и получить результат, как показано ниже:

 ['123', 'abc', '456', 'def'] 

В python я могу сделать вот так:

 pattern = re.compile(r'(\d+)') res = pattern.split(msg)[1:] 

Как получить тот же результат в сценарии bash?
Я так пробовал, но он не работает:

 IFS='[0-9]' # how to define IFS with regex? echo ${msg[@]} 

Получение подстрок с grep и перенос вывода в массив с помощью подстановки команд:

 $ msg='123abc456def' $ out=( $(grep -Eo '[[:digit:]]+|[^[:digit:]]+' <<<"$msg") ) $ echo "${out[0]}" 123 $ echo "${out[1]}" abc $ echo "${out[@]}" 123 abc 456 def 
  • Образец Regex (ERE) [[:digit:]]+|[^[:digit:]]+ соответствует одной или нескольким цифрам ( [[:digit:]]+ ) ИЛИ ( | ) один или несколько цифр (не) [^[:digit:]]+ .

Я бы сделал совпадение вместо расщепления. Здесь я использовал grep но вы можете использовать одно и то же регулярное выражение в чистом bash.

 $ msg='123abc456def' $ grep -oE '[0-9]+|[^0-9]+' <<<$msg 123 abc 456 def 

Учитывая, что вы уже знаете, как это решить в Python, вы можете решить его, используя код, показанный в вопросе:

 MSG=123abc456def; python -c "import re; print('\n'.join(re.split(r'(\\d+)', '${MSG}')[1:]))" 

Хотя python не является стандартом исполняемого файла, например grep или awk , действительно ли это имеет для вас значение?