103 votes

Comment supprimer les espaces d'une chaîne de caractères?

En script bash ubuntu comment enlever les espaces d'une variable

La chaîne sera

   3918912k 

Voulez-vous supprimer tous les espaces vides.

185voto

squiguy Points 8615

Les outils sed ou tr le feront pour vous en remplaçant les espaces blancs par rien

sed 's/ //g'

tr -d ' '

Exemple:

$ echo "   3918912k " | sed 's/ //g'
3918912k

109voto

sputnick Points 31663

Essayez de faire cela dans un shell:

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

Cela utilise l'expansion de paramètres (c'est une fonctionnalité non posix)

[[:blank:]] est une classe regex POSIX (supprime les espaces, les tabulations...), voir http://www.regular-expressions.info/posixbrackets.html

7voto

Tim Pote Points 8905

Étant donné que vous utilisez bash, la manière la plus rapide serait:

shopt -s extglob # Autoriser l'extension du globbing
var=" lakdjsf   lkadsjf "
echo "${var//+([[:space:]])/}"

C'est plus rapide car cela utilise des fonctions intégrées au lieu de démarrer des processus supplémentaires.

Cependant, si vous souhaitez le faire de manière conforme à POSIX, utilisez sed:

var=" lakdjsf   lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'

6voto

gniourf_gniourf Points 9393

Une façon amusante de supprimer tous les espaces d'une variable est d'utiliser printf :

$ myvar='une variable sympa    avec   beaucoup d\'espaces dedans'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
unevariablesympaavecdesespacesdedans

Il s'avère que c'est légèrement plus efficace que myvar="${myvar// /}", mais pas sûr par rapport aux globales (*) qui peuvent apparaître dans la chaîne. Donc ne l'utilisez pas dans du code de production.

Si vous voulez vraiment utiliser cette méthode et que vous êtes vraiment préoccupé par le problème de globbing (et vous devriez l'être), vous pouvez utiliser set -f (qui désactive complètement le globbing) :

$ ls
file1  file2
$ myvar='  une variable sympa avec des espaces  et  oh! non! il y a  une  globale  *  dedans'
$ echo "$myvar"
  une variable sympa avec des espaces  et  oh! non! il y a  une  globale  *  dedans
$ printf '%s' $myvar ; echo
unevariablesympaavecdesespacesetoh!non!ilyauneglobale*dedans
$ # Vous voyez le problème ? Corrigeons cela avec set -f :
$ set -f
$ printf '%s' $myvar ; echo
unevariablesympaavecdesespacesetoh!non!ilyauneglobale*dedans
$ # Comme nous aimons le globbing, nous désactivons l'option f :
$ set +f

J'ai posté cette réponse juste parce que c'était amusant, ne l'utilisez pas en pratique.

5voto

Vous pouvez également utiliser echo pour supprimer les espaces vides, soit au début, soit à la fin de la chaîne, mais aussi les espaces répétés à l'intérieur de la chaîne.

$ myVar="    kokor    iiij     ook      "
$ echo "$myVar"
    kokor    iiij     ook      
$ myVar=`echo $myVar`
$
$ # myVar n'est pas défini sur "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X