Wie werden in Bash Zahlen nur am Ende einer Variablen angezeigt?

Wie werden in Bash Zahlen nur am Ende einer Variablen angezeigt?

Das ist eigentlich nicht meine Frage, jemand hat in einer Facebook-Gruppe danach gefragt, aber niemand konnte sie beantworten, also gibt es einige Variablen:

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

Er möchte die Zahlen am Ende dieser Variablen anzeigen, daher sollte das Endergebnis wie folgt aussehen:

12345
123456

Die Anzahl der Ziffern kann variieren, sie kann zwischen 1 und 10 oder sogar zwischen 1 und 100000 liegen. Und das ist nicht immer so 12345, es ist zufällig. Wie kann man das am besten erreichen? Ich habe es versucht, grep -P "[0-9].*[0-9]$"aber es werden auch Buchstaben zwischen den Zahlen angezeigt.

Antwort1

In Bash können Sie den längsten führenden Teilstring, der mit einer Nicht-Ziffer endet, aus einer Variablen entfernen, $varindem SieParametersubstitution ${var##[^0-9]}oder (POSIXly) ${var##[!0-9]}zB

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

Siehe zum BeispielParametererweiterung

Antwort2

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

Ausgabe:

12345
12345
23456

gemäß 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.

verwandte Informationen