74

ubuntu bashスクリプトで、1つの変数からスペースを削除する方法

文字列は

   3918912k 

すべての空白を削除したい。

4

5 に答える 5

134

ツールsedまたはtrは、空白を何も交換しないことでこれを行います

sed 's/ //g'

tr -d ' '

例:

$ echo "   3918912k " | sed 's/ //g'
3918912k
于 2012-12-01T17:51:25.960 に答える
93

シェルでこれを試してください:

var="  3918912k"
echo ${var//[[:blank:]]/}

パラメーター展開を使用する(これは非機能です)

[[:blank:]]POSIX 正規表現クラス (スペースやタブを削除...) です。http://www.regular-expressions.info/posixbrackets.htmlを参照してください。

于 2012-12-01T12:14:09.283 に答える
5

echo文字列の最初または最後の空白スペースを削除するために使用することもできますが、文字列内のスペースを繰り返すこともできます。

$ myVar="    kokor    iiij     ook      "
$ echo "$myVar"
    kokor    iiij     ook      
$ myVar=`echo $myVar`
$
$ # myVar is not set to "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook
于 2012-12-01T13:45:41.323 に答える
5

bash を使用しているので、最速の方法は次のようになります。

shopt -s extglob # Allow extended globbing
var=" lakdjsf   lkadsjf "
echo "${var//+([[:space:]])/}"

余分なプロセスを起動する代わりに組み込み関数を使用するため、最速です。

ただし、POSIX 準拠の方法で実行する場合は、次を使用しますsed

var=" lakdjsf   lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
于 2012-12-01T16:42:58.203 に答える
5

変数からすべてのスペースを削除する面白い方法は、printf を使用することです。

$ myvar='a cool variable    with   lots of   spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit

よりもわずかに効率的であることがわかりましたが、文字列に現れるmyvar="${myvar// /}"グロブ ( ) に関しては安全ではありません*。したがって、本番コードでは使用しないでください。

本当にこのメソッドを使用したくて、グロビングのことを本当に心配している場合 (そして本当にそうすべきです)、次のように使用できますset -f(グロビングを完全に無効にします):

$ ls
file1  file2
$ myvar='  a cool variable with spaces  and  oh! no! there is  a  glob  *  in it'
$ echo "$myvar"
  a cool variable with spaces  and  oh! no! there is  a  glob  *  in it
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglobfile1file2init
$ # See the trouble? Let's fix it with set -f:
$ set -f
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglob*init
$ # Since we like globbing, we unset the f option:
$ set +f

実際に使用するのではなく、面白​​いという理由だけでこの回答を投稿しました。

于 2012-12-01T16:34:01.893 に答える