bash - tutorial - servidor iptv linux
¿Cómo eliminar el espacio de la cadena? (5)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo recortar espacios en blanco de una variable Bash? 41 respuestas
En ubuntu bash script cómo eliminar el espacio de una variable
cadena será
3918912k
Quiere eliminar todo el espacio en blanco.
Intenta hacer esto en una concha:
s=" 3918912k"
echo ${s//[[:blank:]]/}
Eso usa expansión de parámetros (es una característica que no es posix )
[[:blank:]]
es una clase de expresiones regulares POSIX (eliminar espacios, pestañas ...), consulte http://www.regular-expressions.info/posixbrackets.html
Las herramientas sed
o tr
harán esto por ti intercambiando el espacio en blanco por nada
sed ''s/ //g''
tr -d '' ''
Ejemplo:
$ echo " 3918912k " | sed ''s/ //g''
3918912k
También puede usar echo
para eliminar espacios en blanco, ya sea al principio o al final de la cadena, pero también repetir espacios dentro de la cadena.
$ 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
Una forma divertida de eliminar todos los espacios de una variable es usar printf:
$ myvar=''a cool variable with lots of spaces in it''
$ printf -v myvar ''%s'' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
Resulta que es un poco más eficiente que myvar="${myvar// /}"
, pero no es seguro con respecto a los globos ( *
) que pueden aparecer en la cadena. Así que no lo uses en el código de producción.
Si realmente quieres usar este método y estás realmente preocupado por la cosa de los globos (y deberías hacerlo), puedes usar set -f
(que deshabilita los globos).
$ 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
Publiqué esta respuesta solo porque es divertido, no usarla en la práctica.
Ya que estás usando bash, la forma más rápida sería:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
Es más rápido porque utiliza funciones integradas en lugar de activar procesos adicionales.
Sin embargo, si desea hacerlo de una manera compatible con POSIX, use sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed ''s/[[:space:]]//g''