In ubuntu Bash-Skript, wie Raum Variable von einerWie entferne ich ein Leerzeichen aus einer Zeichenfolge?
String
3918912k
wollen, dass alle Leerzeichen entfernen entfernen.
In ubuntu Bash-Skript, wie Raum Variable von einerWie entferne ich ein Leerzeichen aus einer Zeichenfolge?
String
3918912k
wollen, dass alle Leerzeichen entfernen entfernen.
Versuchen Sie dies in einer Shell tun:
s=" 3918912k"
echo ${s//[[:blank:]]/}
Das nutzt parameter expansion
[[:blank:]]
eine Klasse POSIX regex ist (Leerzeichen entfernen, Tabs ...), siehe http://www.regular-expressions.info/posixbrackets.html
Substitution innerhalb Parameter Expansion ist nicht POSIX. Es funktioniert in Bash (und vielleicht anderen Shells, die ich nicht kenne), aber nicht in Dash zum Beispiel. – MoonSweep
Sie können auch Verwenden Sie echo
, um Leerzeichen entweder am Anfang oder am Ende der Zeichenfolge zu entfernen, aber auch Leerzeichen in der Zeichenfolge zu wiederholen.
$ 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
Dies ist nicht zuverlässig: Wenn 'myVar' Sonderzeichen wie' * 'enthält, wird die Shell diese um die Dateien des aktuellen Verzeichnisses erweitern. –
Wie #bash auf freenode immer sagt ...Verwenden Sie mehr Zitate. 'echo" $ myvar "' verhindert die Expansion von Globs, etc. – bobpaul
@bobpaul, es verhindert die Expansion von Globs, etc., sondern beinhaltet auch die führenden und nachfolgenden Leerzeichen, die Mickaël loswerden wollte :( –
Eine lustige Art und Weise alle Räume von einer Variablen zu entfernen, ist printf zu verwenden:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
Es stellt sich heraus, es ist etwas effizienter als myvar="${myvar// /}"
, aber nicht sicher in Bezug auf Klackse (*
), die angezeigt werden können in der Zeichenfolge. Also nicht im Produktionscode verwenden.
Wenn Sie wirklich, wirklich diese Methode verwenden möchten, und sind wirklich besorgt über die Globbing Sache (und sollten wirklich), können Sie set -f
verwenden (die insgesamt deaktiviert Globbing):
$ 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
Ich stellte diese antworte nur, weil es lustig ist, es nicht in der Praxis zu benutzen.
Allerdings in diesem Fall die Zitate explizit fehlen, um die führenden Leerzeichen zu entfernen, also sind glob chars im Spiel –
Kondense zu einer sicheren Zeile: 'myvar =" $ (set -f; printf "% s" $ myvar) "; echo" [$ myvar] "' –
Da Sie bash verwenden, wäre der schnellste Weg sein:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
Es ist am schnellsten, weil es integrierte Funktionen verwendet anstelle zusätzliche Prozesse Anheizen.
Wenn Sie jedoch in einem POSIX-kompatiblen Art und Weise tun möchten, verwenden Sie sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
In einer nicht-interaktiven Shell (dh ein Skript), müssen Sie für den ersten "shopt -s extglob". –
@ glennjackman Guter Fang. Siehe meine Updates. –
Die Werkzeuge sed
oder tr
wird dies die Leerzeichen für Sie tun nichts durch Vertauschen
sed 's/ //g'
tr -d ' '
Beispiel:
$ echo " 3918912k " | sed 's/ //g'
3918912k
http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable – cnicutar