![문자열 변수에서 숫자 제거(숫자 문자 제거)](https://linux55.com/image/78142/%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%EC%88%AB%EC%9E%90%20%EC%A0%9C%EA%B1%B0(%EC%88%AB%EC%9E%90%20%EB%AC%B8%EC%9E%90%20%EC%A0%9C%EA%B1%B0).png)
문자열 변수에서 모든 숫자 문자를 제거하고 싶습니다. 예를 들면 다음과 같습니다.
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를 사용할 수 있지만 printf
echo는 $VARIABLE(예 \t
: \n
, \r
등) 의 특정 문자 시퀀스를 해석하고 작동 printf
하지 않습니다. ...을 사용하는 많은 예를 보게 될 것입니다 . 더 안전한 것으로 echo
바꾸십시오 .printf '%s'