У меня есть строка типа, rev00000010
и я хочу только последний номер, 10 в этом случае.
Я пробовал это:
TEST='rev00000010'
echo "$TEST" | sed '/^[[:alpha:]][0]*/d'
echo "$TEST" | sed '/^rev[0]*/d'
оба ничего не возвращают, хотя регулярное выражение кажется правильным (пробовал с регулярным выражением )
sed
regular-expression
Майкл Ниманд
источник
источник
Ответы:
Команды, которые вы передали,
sed
означают: если строка соответствует регулярному выражению, удалите ее . Это не то, что вы хотите.Это означает: в каждой строке удалите rev, а затем любое количество нулей.
Кроме того, вам не нужно
sed
для такой простой вещи. Просто используйте bash и расширение его параметров :источник
POSIXly:
Убрал бы каждую вещь слева от самой левой ненулевой цифры.
Bournely / универсально:
источник
test='rev 003A0.1056'
будет производитьnumber="3A0.1056"
. Второе будет разбито на любое пространство, то же самое значение получит:003A0.1056
из expr.Если у вас уже есть переменная TEST, просто распечатайте ее, удалив все буквы
или
Не используйте
%d
илиecho
-команда, потому что числа с начальным0
понимается какoctal
источник
Еще несколько опций (хотя я также рекомендую использовать расширение параметров, как предложено @choroba):
Используйте
sed
илиperl
для замены всего, кроме двух последних символов, последними двумя. Это эффективно удаляет все, кроме двух последних.Установите
awk
разделитель поля на 2 или более 0 и напечатайте последнее поле:Извлеките только последние два символа:
Выведите только 10-ые последние байты:
Обратите внимание, что все вышеперечисленное использует
<<<$var
конструкцию bash. Чтобы использовать его в других оболочках, измените наecho "$TEST" | command
.источник
awk -F"[a-z]" '{print +$NF}'
Чтобы получить «последнее число», выберите любую последовательность цифр в конце строки и преобразуйте ее в десятичное число:
С Bash:
С grep:
источник