J'ai variable:
A="Some variable has value abc.123"
J'ai besoin d'extraire cette valeur, c'est-à-dire abc.123
. Est-ce possible en bash?
Comment savez-vous où commence la valeur? Si c'est toujours les 5e et 6e mots, vous pouvez utiliser par exemple:
B=$(echo $A | cut -d ' ' -f 5-)
Cela utilise la commande cut
pour découper une partie de la ligne, en utilisant un espace simple comme délimiteur Word.
Le plus simple est
echo $A | awk '{print $NF}'
Edit: explication de comment cela fonctionne ...
awk
divise l'entrée en différents champs, en utilisant par défaut des espaces comme séparateur. Codage dur 5
à la place de NF
affiche le 5ème champ dans l'entrée:
echo $A | awk '{print $5}'
NF
est une variable awk
intégrée qui donne le nombre total de champs dans l'enregistrement en cours. Ce qui suit renvoie le nombre 5 car il y a 5 champs dans la chaîne "Some variable has value abc.123"
:
echo $A | awk '{print NF}'
Combiner $
avec NF
affiche le dernier champ de la chaîne, quel que soit le nombre de champs que contient votre chaîne.
Oui; cette:
A="Some variable has value abc.123"
echo "${A##* }"
imprimera ceci:
abc.123
(Le ${parameter##Word}
la notation est expliquée dans §3.5.3 "Shell Parameter Expansion" du Bash Reference Manual .)
Quelques exemples d'utilisation de l'extension de paramètres
A="Some variable has value abc.123"
echo "${A##* }"
abc.123
Correspondance la plus longue sur l'espace ""
echo "${A% *}"
Some variable has value
Match le plus long. point
echo "${A%.*}"
Some variable has value abc
Correspondance la plus courte sur l'espace ""
echo "${A%% *}"
some
En savoir plus Shell-Parameter-Expansion