これは実際に私の質問ではありません。誰かがFacebookグループでこの質問をしましたが、誰も答えることができなかったので、いくつかの変数があります。
x="abcde12345"
y="s'ldfsd[opsk12345"
z="1234sdfsdfafa23456"
彼はこの変数の末尾に数字を表示したいので、最終結果は次のようになります。
12345
123456
桁数は1から10まで、さらには1から100,000までさまざまです。そしていつもこういうわけではなく、12345
ランダムです。これを達成するための最良の方法は何ですか?私はこれを試しましたが、grep -P "[0-9].*[0-9]$"
数字の間に文字も表示します。
答え1
$var
Bashでは、以下を使用して、変数から数値以外の値で終わる最長の先行部分文字列を削除できます。パラメータの置換 ${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.