文字列変数から数値を削除する(数値文字を削除)

文字列変数から数値を削除する(数値文字を削除)

文字列変数からすべての数値文字を削除したいと思います。たとえば、次のようになります。

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'

関連情報