文字列変数からすべての数値文字を削除したいと思います。たとえば、次のようになります。
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'