문자열 변수에서 숫자 제거(숫자 문자 제거)

문자열 변수에서 숫자 제거(숫자 문자 제거)

문자열 변수에서 모든 숫자 문자를 제거하고 싶습니다. 예를 들면 다음과 같습니다.

VARIABLE=qwe123rty567

도착하다:

echo $VARIABLE
> qwerty

많이 찾았어요우편그러나 그들은 sed를 사용하여 파일/파일 이름으로 출력하거나 에코합니다. 공백 때문에 사용할 수 없습니다.

VARIABLE=$VARIABLE | sed 's/[0-9]*//g'

답변1

그리고 bash:

$ printf '%s\n' "${VARIABLE//[[:digit:]]/}"
qwerty

[:digit:]로케일에 따라 0~9 이외의 문자를 포함할 수 있습니다. 0~9만 제거하려면 C대신 locale을 사용하세요.

답변2

다양성을 위해 사용되는 방법은 다음과 같습니다.

tr:

VARIABLE=$(printf '%s' "$VARIABLE" | tr -d '0123456789')

sed:

VARIABLE=$(printf '%s' "$VARIABLE" | sed 's/[0-9]//g')

가장 간단한 Bash 확장:

VARIABLE=${VARIABLE//[0-9]/}

마지막으로 Bash를 다시 확장합니다. 이번에는 [[:digit:]]문자 클래스를 사용합니다.

VARIABLE=${VARIABLE//[[:digit:]]/} 

(다른 사람들이 지적했듯이) 참고하십시오 [[:digit:]]. ~해야 한다귀하의 지역에서 숫자로 정의된 모든 것을 다룹니다.

답변3

VARIABLE=qwe123rty567
IFS=0123456789
set -f # Disable glob
printf %s $VARIABLE

qwerty

추가 조작이 가능합니다.

VARIABLE=qwe123rty567
IFS=0123456789
set -f # Disable glob
set -- $VARIABLE
IFS=;   VARIABLE=$*
printf "replaced $# numbers in \$VARIABLE. RESULT:\t%s\n" "$*"

replaced 6 numbers in $VARIABLE. RESULT:    qwerty

답변4

공백(실제로는 변수를 인용하지 못한 것)은 문제의 일부일 뿐입니다.

이와 같은 변수를 파이프 할 수 없으며 sed작동하지 않습니다. 보다 정확하게는 "$VARIABLE" 값을 파이프하지 않으며 sed, 쉘은 "$VARIABLE" 값을 실행하고 출력을 파이프하려고 시도합니다 sed. 그런데, 이것은 버그가 아닙니다. $VARIABLE에 유효한 명령(예: ls또는 기타 등등)이 포함된 경우 rsync유용합니다 .

또한 명령이나 파이프의 출력을 변수에 할당하려면 명령/파이프를 로 묶어야 합니다 $().

따라서 수정 변수를 사용하려면 sed다음을 수행해야 합니다.

VARIABLE=$(printf '%s' "$VARIABLE" | sed 's/[0-9]*//g')

echo대신 There를 사용할 수 있지만 printfecho는 $VARIABLE(예 \t: \n, \r등) 의 특정 문자 시퀀스를 해석하고 작동 printf하지 않습니다. ...을 사용하는 많은 예를 보게 될 것입니다 . 더 안전한 것으로 echo바꾸십시오 .printf '%s'

관련 정보