첫 번째 숫자를 찾고 나머지 문자열을 반환합니다.

첫 번째 숫자를 찾고 나머지 문자열을 반환합니다.

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) 쉘이 매우 느립니다.

관련 정보