156 votes

Comment puis-je récupérer le premier mot de la sortie d'une commande dans Bash ?

J'ai une commande, par exemple : echo "word1 word2". Je veux mettre un tuyau (|) et obtenir "word1" de la commande.

echo "word1 word2" | ....

Que dois-je mettre après le tuyau ?

239voto

mattbh Points 1116

AWK est une bonne option si vous devez gérer l'espace blanc de fuite, car il prendra soin de vous :

echo "   word1  word2 " | awk '{print $1;}' # Prints "word1"

Cut ne s'en occupera pas :

echo "  word1  word2 " | cut -f 1 -d " " # Prints nothing/whitespace

« couper » ici n'imprime rien/espace blanc, parce que la première chose avant un espace était un autre espace.

81voto

ghostdog74 Points 86060

Il n'est pas nécessaire d'utiliser des commandes externes. Bash lui-même peut faire le travail. En supposant que « word1 word2 » vous avez obtenu de quelque part et stocké dans une variable, par exemple,

$ string="word1 word2"
$ set -- $string
$ echo $1
word1
$ echo $2
word2

Vous pouvez maintenant assigner $1, $2, etc. à une autre variable si vous le souhaitez.

37voto

Isaías Points 426

Je pense qu'un moyen efficace est l'utilisation de tableaux de bord :

array=( $string ) # Do not use quotes in order to allow word expansion
echo ${array[0]}  # You can retrieve any word. Index runs from 0 to length-1

En outre, vous pouvez lire directement les tableaux dans une pipe-line :

echo "word1 word2" | while read -a array; do echo "${array[0]}" ; done

34voto

John Marter Points 111
echo "word1 word2 word3" | { read first rest ; echo $first ; }

Cela a l'avantage de ne pas utiliser de commandes externes et de laisser les variables $ 1, $ 2, etc. intactes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X