J'essaie de trouver la meilleure expression régulière pour extraire un numéro de version d'une chaîne.
J'essaie d'utiliser ceci: sed -ne 's / [^ 0-9] * \ (\ ([0-9] \. \) \ {1,8 \} [0-9] [0-9] [^.] \). * / \ 1 / p ' code> p> Par exemple: P>
net-backend:pom:0.0.220-SNAPSHOT
6 Réponses :
Un awk code> suites mieux ici:
Fwiw J'utiliserais sub (/-.*/, ""); Imprimer $ NF code> - Ce sera un peu plus robuste pour plus / inattendu
: code> S dans la chaîne d'entrée (en faisant des hypothèses sur la manière dont cela devrait être traité bien sûr!).
Oui je peux le faire $ nf code> aussi mais il y a toujours 3 champs dans une dépendance des grades
Une commande PURE Linux Vous pouvez faire:
0.0.220
Ce que j'étais sur le point de dire, c'est pour une simple chaîne comme celle-là, il n'est pas nécessaire d'utiliser d'autres langues simplement pour couper la chaîne.
Dans votre motif, vous vous attendez à correspondre au moins 2 fois un chiffre Vous pouvez répéter la deuxième classe de caractères 0+ fois Au lieu de cela et ometez / p> [0-9] code> suivi de n'importe quel caractère sauf un point.
[^.] code> comme
0.0.1 code> a un seul chiffre à la fin. p>
Ce sont par exemple des pages dans lesquelles vous pouvez trouver beaucoup d'informations régulier-expressions.info/Tutorial.html Rexegg.com/regex-QuickStart.html Anubhava a écrit un livre à propos de ça :-)
avec gnu awk. Utilisez sortie: p> : code> et
- code> comme séparateur de champ et sortie secondaire secondaire:
Cela donnera un résultat erroné si l'entrée est "Net-Backend: POM: 0.0.220" code>
@anubhava Droite, mais toutes les autres réponses donneront également le mauvais résultat pour certaines entrées autres que ce que l'OP nous a dit qu'ils doivent gérer. Votre réponse échouerait pour Net-Backend: FOO: POM: POM: 0.0.220-Snapshot Code>, par exemple. Celui-ci est une solution facile (utilisez $ NF au lieu de 3 $), mais il peut y avoir des chaînes différentes et vous obtenez le point - tout ce que nous devons continuer est l'entrée d'échantillon que OP fournit et si l'entrée réelle ne ressemble à ce que Ymmv.
@Edmorton: Net-Backend: FOO: POM: 0.0.220-Snapshot Code> n'est pas une entrée valide, car il s'agit en réalité d'une ligne de dépendance de la grade où le format de chaque entrée est
Groupe: Nom: Version code> (toujours 3 champs)
@anubhava, je n'ai jamais entendu l'expression une ligne de dépendance de la note code>, comment savez-vous quelle est ce que cette entrée est par opposition à des données
: code> -Separated?
Un exemple de ligne de mon build.gradle code> est
compile ('com.google.guava: goyava: 29.0-jre') code> où la dépendance est définie dans ce format
groupe : Nom: version code>
Pas sûr que cela signifie que toutes les lignes de texte qui ressemblent à un peu comme celle-ci sont pour la même application avec les mêmes contraintes, mais peut-être que vous avez raison, idk.
Pourriez-vous essayer de suivre, écrit et testé avec des échantillons montrés dans GNU 2ème solution: strong> < / em> avec awk code>
sed code> p>
awk, sortie: p> s'il y a plusieurs correspondances sur ligne, vous devez envelopper un match code> et regex:
pendant code> autour de celui-ci: p>
0.0.1
0.0.2
Dans le second cas, le second
[0-9] code> ne peut pas correspondre dans
0.0.1 code>
Chaque fois que vous vous trouvez en disant quelque chose comme
J'essaie de trouver la meilleure expression régulière à ... Code> Il suffit de garder à l'esprit cette observation très précise: Certaines personnes, lorsqu'elles sont confrontées à un problème, pensez-moi, je vais utiliser des expressions régulières." Maintenant, ils ont deux problèmes. .
Cela pourrait aider:
tr -cd '0-9. \ N'