чтобы соответствовать цифре в grep, вы можете использовать [0-9]. Чтобы сопоставить что-либо, кроме цифры, вы можете использовать [^ 0-9]. Так как это может быть любое количество символов или без символов, вы добавляете «*» (любое число предыдущего). Итак, что вы хотите, это логически
(anything not a digit or nothing)* (any single digit) (anything not a digit or nothing)* .
...
до тех пор, пока у вас не будет 4 группы "любая цифра". то есть [^ 0-9] * [0-9] ...
Я обнаружил, что с длинными шаблонами grep, особенно с длинными цепочками специальных символов, которые нужно экранировать, лучше создавать медленно, поэтому вы уверены, что понимаете, что происходит. Например,
#this will highlight your matches, and make it easier to understand
alias grep='grep --color=auto'
echo 'a1b2' | grep '[0-9]'
покажет вам, как это соответствует. Затем вы можете расширить шаблон, как только вы поймете каждую часть.