Удалите первые цифры из строки с помощью Bash, используя расширение параметра

Начальная строка RU="903B/100ms"из которого я хочу получить B/100ms,

В настоящее время я написал:

#!/bin/bash
RU="903B/100ms"
RU=${RU#*[^0-9]}
echo $RU 

который возвращается /100ms поскольку расширение параметра удаляет вплоть до первого нечислового символа. Я хотел бы сохранить первый нечисловой символ в этом случае. Как бы я сделал это, внеся изменения в приведенный выше текст?

3 ответа

Решение

Вы можете использовать BASH_REMATCH, чтобы извлечь желаемое значение соответствия:

$ RU="903B/100ms"
$ [[ $RU =~ ^([[:digit:]]+)(.*) ]] && echo ${BASH_REMATCH[2]}
B/100ms

Или просто поймать нужную часть как:

$ [[ $RU =~ ^[[:digit:]]+(.*) ]] && echo ${BASH_REMATCH[1]}
B/100ms

Если предположить, shopt -s extglob:

RU="${RU##+([0-9])}"
echo "903B/100ms" | sed 's/^[0-9]*//g'
B/100ms
Другие вопросы по тегам