¿Cómo dividir la cadena después y antes del espacio en el script de shell?

Respuestas:

31

Además de la sugerencia de jasonwryan , puedes usar cut:

echo $var | cut -d' ' -f1

Lo anterior cutes la echosalida con un delimitador de espacio ( -d ' ') y genera el primer campo ( -f1)

Joseph R.
fuente
no está trabajando. Ya lo usé. dice comando no encontrado.
Surbhi
3
@surbhi ¿Qué dice el comando no encontrado? cutEs una utilidad estándar. Su script probablemente tenga un error en otro lugar. En términos más generales, nunca digas "no está funcionando". Siempre diga exactamente qué código ejecutó, exactamente qué sucedió y copie y pegue los mensajes de error.
Gilles 'SO- deja de ser malvado'
Esta respuesta debe ser aceptada, ya que es la forma más concisa y directa. No funcionará en casos que son más complicados que el ejemplo dado, por supuesto.
Dan Nguyen
9

Una buena manera de hacer esto es usar una matriz bash para dividir una cadena en espacios. Puede declarar una matriz simplemente usando paréntesis:

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[@]}'"
gogoud
fuente
esto dice comando no encontrado
surbhi
Depende de ti usando bash. Si está utilizando un shell diferente, puede que no funcione. echo $SHELLdebería mostrar: /bin/basho similar.
Gogoud
no funciona zsh; (
TonyH
Esto funciona en ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH