如何在bash中僅在變數末尾顯示數字?

如何在bash中僅在變數末尾顯示數字?

這其實不是我的問題,有人在facebook群組裡問過這個問題,但沒有人能夠回答,所以有一些變數:

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

他想顯示這些變數末尾的數字,所以最終結果應該是這樣的:

12345
123456

位數不一,可以是1到10,甚至可以是1到100000 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.

相關內容