2010-10-21 11 views
0

J'ai cette chaîne en bash:bash: extraire double de chaîne

str=sdk.iphoneos4.1.sdk 

et je voudrais avoir une variable « 4.1 » dans ce

est-il un moyen d'analyser un flotteur/double valeur dans bash?

+0

Comme dans, extraire le 4.1 de la chaîne ci-dessus? Si c'est le cas, vous devriez être capable de le faire avec 'grep', même si je n'en ai pas l'expérience. L'un des gourous grep ici sera en mesure de vous aider quand même! – Azz

+0

Un numéro de version est une liste d'ints, pas un flottant. Par exemple, 4.1 et 4.001 sont généralement considérés comme équivalents. – grawity

Répondre

1

En supposant que le texte qui l'entoure reste toujours le même:

str=${str#sdk.iphoneos} 
str=${str%.sdk} 

C'est moins portable (bash seulement), mais accepte quoi que ce soit à la place de iphoneos:

shopt -s extglob 
str=${str##sdk.*([a-z])} 
str=${str%.sdk} 
1

en supposant qu'aucun autre chiffres ailleurs

$ str=sdk.iphoneos4.0.0.1.sdk 
$ echo $str | grep -Po '(\d+.*\d+)(?=\.)' 
4.0.0.1 
2

Dans Bash 3.2 ou plus:

str=sdk.iphoneos4.1.sdk 
pattern='[0-9]+\.[0-9]+' 
[[ $str =~ $pattern ]] 
echo ${BASH_REMATCH[0]}