TEXT='Random text 1 and some more random'
TEXT1='Random 19 and more'
TEXT='Anything 7 text text text'
숫자와 그 숫자 앞에 있는 모든 것을 얻고 싶습니다.
이제 다음과 같이 숫자 없이 텍스트를 얻을 수 있습니다.
echo "${TEXT// [0-9]*/}"
내 질문은: 내가 사용하고 있는 것과 같이 내장된 순수 Bash를 통해 내가 원하는 것을 얻을 수 있는 방법이 있습니까?
답변1
이 시도:
echo "'${TEXT// [^0-9]*/}'" "'${TEXT1// [^0-9]*/}'"
산출:
'Anything 7' 'Random 19'
문자열에아니요숫자, 이 코드는 첫 번째 공백 이후의 모든 내용을 제거합니다.
답변2
숫자 세트가 하나만 있는 경우 두 단계(하나의 확장)로 수행할 수 있습니다.
숫자로 끝나는 가장 긴 선행 텍스트를 제거합니다.
$ text='Random 923 and more' $ echo "'${text##*[0-9]}'" ' and more'
그런 다음 원래 문자열에서 선택한 후행 텍스트를 제거합니다.
$ echo "'${text%"${text##*[0-9]}"}'" 'Random 9'
이 방법은 후행 텍스트에 숫자가 추가되지 않은 경우에 작동합니다.
여러 개의 숫자 클러스터가 있을 수 있고 첫 번째 숫자만 필요한 경우 숫자가 더 길어지고 두 개의 추가 변수가 필요합니다.
$ text='Random 945 and more 752 numbers'
$ lead=${text%%[0-9]*}
$ trail=${text#"$lead"}
$ echo "'$lead${trail%%[!0-9]*}'"
'Random 945'
답변3
Bash 셸의 정규식 일치 기능을 사용할 수 있습니다.
$ TEXT='Random text 1 and some more random'
$ [[ $TEXT =~ ^[^0-9]*[0-9] ]] && printf '%s\n' "$BASH_REMATCH"
Random text 1
^[^0-9]*[0-9]
0개 이상의 숫자가 아닌 숫자와 문자열의 시작 부분에 고정된 숫자와 일치합니다 .