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, $var
indem 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.