como dividir a string antes e depois do espaço no shell script?


Respostas:


31

Além da sugestão de jasonwryan , você pode usar cut:

echo $var | cut -d' ' -f1

O exemplo acima cuté a echosaída com um delimitador de espaço ( -d ' ') e gera o primeiro campo ( -f1)


Não está funcionando. eu já usei. diz comando não encontrado.
Surbhi

3
@surbhi O que diz comando não encontrado? cuté um utilitário padrão. Seu script provavelmente tem um erro em outro lugar. De um modo mais geral, nunca diga "não está funcionando". Sempre diga exatamente qual código você executou, exatamente o que aconteceu e copie e cole as mensagens de erro.
Gilles 'SO- stop be evil' '

Essa resposta deve ser aceita, pois é a maneira mais concisa e direta. Não funcionará em casos mais complicados do que o exemplo dado, é claro.
Dan Nguyen

9

Uma maneira elegante de fazer isso é usar uma matriz bash para dividir uma sequência em espaços. Você pode declarar uma matriz simplesmente usando colchetes:

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

isto diz que o comando não foi encontrado
surbhi 19/03/2015

Depende de você usar o bash. Se você estiver usando um shell diferente, ele pode não funcionar. echo $SHELLdeve mostrar: /bin/bashou similar.
gogoud

Não funciona em zsh; (
TonyH

Isto funciona em ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.