Bash를 사용하여 문자열의 첫 번째 숫자를 찾은 다음 문자열의 나머지 부분을 어떻게 제거합니까?
예를 들어, 다음 문자열이 있습니다.
SomeText.MoreText.Whatever.1.2.3.4-branch.ext
이것으로 끝나길 바라겠습니다-
1.2.3.4-branch.ext
숫자를 찾는 방법을 제안하는 몇 가지 답변을 찾았습니다(예:이 문제), 그러나 문자열의 일부가 발견되어 반환되지 않습니다.
답변1
grep
일치하는 부분( -o
) 만 추출하려면 , 를 사용하십시오 .
grep -o '[0-9].*'
[0-9]
첫 번째 숫자와 일치하고.*
나머지 숫자와 일치 합니다.
예:
$ grep -o '[0-9].*' <<<'SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
1.2.3.4-branch.ext
답변2
대부분의 POSIX 셸에서 가장 간단하고 사용 가능한 방법은 다음과 같습니다.
$ var='SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
$ echo "${var#"${var%%[0-9]*}"}"
1.2.3.4-branch.ext
이런 방식으로 외부 유틸리티(expr, sed, awk 등)를 호출할 필요가 없으며 이러한 유틸리티를 호출하는 데 소요되는 시간도 방지됩니다(이 예의 긴 문자열과 같은 짧은 문자열의 경우(k's) 10) 쉘이 매우 느립니다.