Bashで変数の末尾にのみ数字を表示するには?

Bashで変数の末尾にのみ数字を表示するには?

これは実際に私の質問ではありません。誰かがFacebookグループでこの質問をしましたが、誰も答えることができなかったので、いくつかの変数があります。

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

彼はこの変数の末尾に数字を表示したいので、最終結果は次のようになります。

12345
123456

桁数は1から10まで、さらには1から100,000までさまざまです。そしていつもこういうわけではなく、12345ランダムです。これを達成するための最良の方法は何ですか?私はこれを試しましたが、grep -P "[0-9].*[0-9]$"数字の間に文字も表示します。

答え1

$varBashでは、以下を使用して、変数から数値以外の値で終わる最長の先行部分文字列を削除できます。パラメータの置換 ${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.

関連情報