Wie teile ich die Zeichenkette nach und vor dem Leerzeichen im Shell-Skript auf?


Antworten:


30

Zusätzlich zu jasonwryans Vorschlag können Sie Folgendes verwenden cut:

echo $var | cut -d' ' -f1

Der obige cutS den echoAusgang mit einem Raumbegrenzungszeichen ( -d ' ') und gibt das erste Feld ( -f1)


es funktioniert nicht. Ich habe es bereits benutzt. Der Befehl wurde nicht gefunden.
Surbhi

3
@surbhi Was sagt Befehl nicht gefunden? cutist ein Standarddienstprogramm. Ihr Skript hat wahrscheinlich irgendwo anders einen Fehler. Sagen Sie im Allgemeinen niemals „es funktioniert nicht“. Sagen Sie immer genau, welchen Code Sie ausgeführt haben, was genau passiert ist und kopieren Sie Fehlermeldungen.
Gilles 'SO - hör auf böse zu sein'

Diese Antwort sollte akzeptiert werden, da dies der prägnanteste und direkteste Weg ist. In Fällen, die komplizierter sind als das angegebene Beispiel, funktioniert das natürlich nicht.
Dan Nguyen

9

Eine gute Möglichkeit, dies zu tun, besteht darin, ein Bash-Array zu verwenden, um eine Zeichenfolge in Leerzeichen aufzuteilen. Sie können ein Array einfach mit eckigen Klammern deklarieren:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

Hier steht, dass der Befehl nicht gefunden wurde
surbhi

Es hängt davon ab, ob Sie Bash verwenden. Wenn Sie eine andere Shell verwenden, funktioniert sie möglicherweise nicht. echo $SHELLsollte zeigen: /bin/bashoder ähnlich.
Gogoud

funktioniert nicht in zsh; (
TonyH

Dies funktioniert in ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.