bash를 사용하여 변수에서 특정 문자를 제거하십시오. 아래와 같이 시도했지만 그것을 .주는 다른 캐릭터로

변수 (내 경우에는 개발 키트 버전) 를 구문 분석하여 dot ( .)을 무료 로 만들고 싶습니다 . 인 경우 version='2.3.3'원하는 출력은 233입니다.

나는 아래와 같이 시도했지만 그것을 .주는 다른 캐릭터로 교체 해야 합니다 2_3_3. 경우 잘했을 것이다 tr . ''일 것이다.

  1 VERSION='2.3.3' 
  2 echo "2.3.3" | tr . _


답변

외부 프로그램을 실행할 필요가 없습니다. bash문자열 조작 은 그것을 처리 할 수 있습니다 ksh((그리고 어디에서 왔는지) 및 zsh).

$ VERSION='2.3.3'
$ echo "${VERSION//.}"
233

해당 쉘 매뉴얼에서 매개 변수 확장 섹션에서이를 찾을 수 있습니다.


답변

연대순으로 :

tr / sed

echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'

csh / tcsh

echo $VERSION:as/.//

POSIX 쉘 :

set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"

ksh / zsh / bash / yash (및 ash내장 된 경우 busybox ASH_BASH_COMPAT)

echo "${VERSION//.}"

zsh

echo $VERSION:gs/./

답변

성공적인 답변 외에도 이미 존재합니다. 옵션을 tr사용하여 동일한 작업을 수행 할 수 있습니다 --delete.

echo "2.3.3" | tr --delete .

어느 것이 출력 될까요? 233


답변

당신은 sed대신 시도해야

sed 's/\.//g'


답변

echo "$VERSION" | tr -cd [:digit:]

다른 문자가 무엇이든 관계없이 숫자 만 반환합니다.


답변

$ VERSION='2.3.3'                                     
$ perl -pe 's/\.//g' <<< "$VERSION"           
233

파이썬

$ VERSION='2.3.3'                                     
$ python -c 'import sys;print sys.argv[1].replace(".","")' "$VERSION"
233

$VERSION숫자와 점만 포함 하면 더 짧은 작업을 수행 할 수 있습니다.

$ python -c 'print "'$VERSION'".replace(".","")'
233

( $VERSION문자가 포함되어 있으면 코드 삽입 취약점이므로주의하십시오 ).

AWK

$ VERSION='2.3.3'
$ awk 'BEGIN{gsub(/\./,"",ARGV[1]);print ARGV[1]}' "$VERSION"
233

아니면 이거:

$ awk '{gsub(/\./,"")}1' <<< "$VERSION"
233