comment diviser la chaîne après et avant l'espace dans le script shell?


Réponses:


31

En plus de la suggestion de jasonwryan , vous pouvez utiliser cut:

echo $var | cut -d' ' -f1

Ce qui précède cutest la echosortie avec un délimiteur d'espace ( -d ' ') et sort le premier champ ( -f1)


ça ne marche pas. je l'ai déjà utilisé. il dit que la commande est introuvable.
surbhi

3
@surbhi Que dit la commande introuvable? cutest un utilitaire standard. Votre script contient probablement une erreur ailleurs. Plus généralement, ne dites jamais «ça ne marche pas». Dites toujours exactement quel code vous avez exécuté, exactement ce qui s'est passé, et copiez-collez les messages d'erreur.
Gilles 'SO- arrête d'être méchant'

Cette réponse doit être acceptée, car c'est la manière la plus concise et la plus directe. Cela ne fonctionnera pas dans les cas qui sont plus compliqués que l'exemple donné, bien sûr.
Dan Nguyen

10

Une bonne façon de le faire est d'utiliser un tableau bash pour fractionner une chaîne sur des espaces. Vous pouvez déclarer un tableau simplement en utilisant des crochets:

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

cela dit que la commande n'est pas trouvée
surbhi

Cela dépend de votre utilisation de bash. Si vous utilisez un autre shell, cela peut ne pas fonctionner. echo $SHELLdevrait montrer: /bin/bashou similaire.
gogoud

ne fonctionne pas zsh; (
TonyH

Cela fonctionne dans ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.