Как отобразить числа только в конце переменной в bash?

Как отобразить числа только в конце переменной в bash?

На самом деле это не мой вопрос, кто-то спрашивал об этом в группе на Facebook, но никто не смог ответить, поэтому есть некоторые переменные:

x="abcde12345"
y="s'ldfsd[opsk12345"
z="1234sdfsdfafa23456"

Он хочет отобразить числа в конце этих переменных, поэтому конечный результат должен быть таким:

12345
123456

Количество цифр может быть разным, это может быть от 1 до 10 или даже от 1 до 100000. и это не всегда 12345, это случайно. Как лучше всего это сделать? Я пробовал, grep -P "[0-9].*[0-9]$"но это также показывает буквы между цифрами.

решение1

В bash можно удалить самую длинную начальную подстроку, заканчивающуюся нецифрой, из переменной, $varиспользуяподстановка параметров ${var##[^0-9]}или (POSIXly) ${var##[!0-9]}например

$ echo "$x --> ${x##*[^0-9]}"
abcde12345 --> 12345
$ 
$ echo "$y --> ${y##*[^0-9]}"
s'ldfsd[opsk12345 --> 12345
$ 
$ echo "$z --> ${z##*[^0-9]}"
1234sdfsdfafa23456 --> 23456

См. напримерРасширение параметров

решение2

#!/bin/bash

x="abcde12345"
y="s'ldfsd[opsk12345"
z="1234sdfsdfafa23456"


echo $x | grep -o '[0-9]*$'
echo $y | grep -o '[0-9]*$'
echo $z | grep -o '[0-9]*$'

Выход:

12345
12345
23456

как в man grep

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on
a separate output line.

Связанный контент