Bash에서 변수 끝에만 숫자를 표시하는 방법은 무엇입니까?

Bash에서 변수 끝에만 숫자를 표시하는 방법은 무엇입니까?

이것은 실제로 내 질문이 아닙니다. 누군가가 페이스북 그룹에서 이에 대해 질문했지만 아무도 대답할 수 없었으므로 몇 가지 변수가 있습니다.

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

그는 해당 변수 끝에 숫자를 표시하려고 하므로 최종 결과는 다음과 같아야 합니다.

12345
123456

자릿수는 다양하며 1에서 10까지 또는 1에서 100000까지일 수 있습니다. 항상 그런 것은 아니며 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

남자 grep에 따라

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on
a separate output line.

관련 정보