web-dev-qa-db-ja.com

bashを使用して変数から特定の文字を削除する

変数(私の場合は開発キットのバージョンです)を解析して、それをdot(.) 自由。 version='2.3.3'、必要な出力は233

以下のように試しましたが、.は、別の文字に置き換えて2_3_3tr . ''はうまくいったでしょう。

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

外部プログラムを実行する必要はありません。 bashの-​​ 文字列操作 はそれを処理できます(ksh(それがどこから来たか)とzshでも利用可能):

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

(これらのシェルのマニュアルでは、これはパラメータ展開セクションにあります。)

148
manatwork

年代順:

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_BASH_COMPATでビルドした場合はbusybox ash

echo "${VERSION//.}"

zsh

echo $VERSION:gs/./
97

成功した回答に加えて、すでに存在しています。 --deleteオプションを使用して、trを使用しても同じことができます。

echo "2.3.3" | tr --delete .

出力されるのは:233

24
daz

代わりにsedを試してください

sed 's/\.//g'

8
fduff

Perl

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

Python

$ 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
4
echo "$VERSION" | tr -cd [:digit:]

他の文字が何であっても、数字のみを返します

4
user2796674