¿Cómo mostrar números solo al final de una variable en bash?

¿Cómo mostrar números solo al final de una variable en bash?

En realidad esta no es mi pregunta, alguien preguntó sobre esto en un grupo de Facebook pero nadie pudo responder, por lo que hay algunas variables:

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

Quiere mostrar los números al final de esas variables, por lo que el resultado final debería ser así:

12345
123456

El número de dígitos varía, puede ser de 1 a 10 o incluso de 1 a 100000. Y no siempre es así 12345, es aleatorio. Cuál es la mejor manera de lograr esto ? Lo intenté grep -P "[0-9].*[0-9]$"pero también muestra letras entre números.

Respuesta1

En bash, puede eliminar la subcadena inicial más larga que termina con un dígito que no es un dígito de una variable $varusandosustitución de parámetros ${var##[^0-9]}o (POSIXly), ${var##[!0-9]}por ejemplo

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

ver por ejemploExpansión de parámetros

Respuesta2

#!/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]*$'

Producción:

12345
12345
23456

según 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.

información relacionada