2013-03-08 3 views
0

J'ai une chaîne qui a inférieure à la valeurRegex pour extraire la version de chaîne

String1 = ivrognes-app-1.2.0-4.20120308.InLinuxOS.x86_64

Je dois extraire seule version de cette chaîne qui est « 1.2.0-4 »

J'ai essayé une expression régulière comme mentionné ci-dessous avec sed

sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,1\}[0-9][^.]\).*/\1/p' 

mais j'obtiens seulement le résultat "1.2.0-", nombre manquant après "-" qui est 4. J'ai essayé de le corriger mais il retourne null.

Veuillez, conseiller

Répondre

1

que diriez-vous grep:

grep -Po "(?<=-)[\d.-]*(?=.\d{8})" 
0

Pouvez-vous essayer?

[^0-9]*\(\([0-9]\.\)\{0,2\}[0-9][^.]\).*

1
sed -n 's/^.*-\([0-9.]*-[0-9]*\)\..*$/\1/p' 
1

Cela devrait fonctionner, et devrait également prendre en compte l'un des numéros de version étant plus qu'un chiffre.

String1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64 
sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{0,2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1" 
1.2.0-4 

BTW, ce sera aussi en fonction de chaînes de version comme (qui, de votre question n'est pas clair si vous voulez que ce comportement ou non):

1-1 
1.2-1 

Si vous souhaitez appliquer w.x.y-z, vous pouvez utiliser ceci:

sed -n 's/[^0-9]*\(\([0-9]\+\.\)\{2\}[0-9]\+-[0-9]\+\).*/\1/p' <<< "$String1" 
+0

Merci! beaucoup. Pourriez-vous également suggérer un reg ex pour vérifier les versions Que faire si j'aime vérifier une version dans la version 1.0.0 peut être "1.0.0-1" ou "1.0.0-2" ou "1.0.0-3" et j'ai juste besoin de vérifier pour quelle version de mise à jour est-il "-1 ou -2 ou -3" "1.0.0-1 ou 1.0.0-2 ou 1.0.0-3" quelle regex puis-je utiliser? "sed -ne s/1.0.0 \ - [0-9] \ 1/p" cela fonctionnerait-il? Merci! sed -n 's/1.0.0 \ - [0-9]' – user2150307

0

Vous pouvez également essayer l'expansion des paramètres:

string1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64 
string2=${string1%".${string1#*-*-*-*.}"} 
version=${string2#*-*-} 
printf "%s\n" "$version" 
Questions connexes