come dividere la stringa dopo e prima dello spazio nello script della shell?


Risposte:


31

Oltre al suggerimento di Jasonwryan , puoi usare cut:

echo $var | cut -d' ' -f1

Quanto sopra cutè l' echooutput con un delimitatore di spazio ( -d ' ') e genera il primo campo ( -f1)


non funziona. l'ho già usato. dice comando non trovato.
Surbhi,

3
@surbhi Cosa dice comando non trovato? cutè un'utilità standard. Il tuo script probabilmente ha un errore altrove. Più in generale, non dire mai "non funziona". Di 'sempre esattamente quale codice hai eseguito, esattamente cosa è successo e copia e incolla i messaggi di errore.
Gilles 'SO- smetti di essere malvagio' il

Questa risposta dovrebbe essere accettata, in quanto è il modo più conciso e diretto. Non funzionerà nei casi più complicati dell'esempio dato, ovviamente.
Dan Nguyen il

9

Un modo pulito per farlo è usare un array bash per dividere una stringa su spazi. Puoi dichiarare un array semplicemente usando le parentesi:

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[@]}'"

questo dice comando non trovato
surbhi

Dipende da te usando bash. Se si utilizza una shell diversa, potrebbe non funzionare. echo $SHELLdovrebbe mostrare: /bin/basho simile.
gogoud,

non funziona zsh; (
TonyH,

Questo funziona in ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.