0
votes

Extrait Numéro séparé de "." du texte

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


3 commentaires

Dans le second cas, le second [0-9] ne peut pas correspondre dans 0.0.1


Chaque fois que vous vous trouvez en disant quelque chose comme J'essaie de trouver la meilleure expression régulière à ... 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'


6 Réponses :


2
votes

Un awk suites mieux ici: xxx xxx


2 commentaires

Fwiw J'utiliserais sub (/-.*/, ""); Imprimer $ NF - Ce sera un peu plus robuste pour plus / inattendu : 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 aussi mais il y a toujours 3 champs dans une dépendance des grades



2
votes

Une commande PURE Linux Vous pouvez faire:

0.0.220


1 commentaires

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.



1
votes

Dans votre motif, vous vous attendez à correspondre au moins 2 fois un chiffre [0-9] suivi de n'importe quel caractère sauf un point.

Vous pouvez répéter la deuxième classe de caractères 0+ fois Au lieu de cela et ometez [^.] comme 0.0.1 a un seul chiffre à la fin. xxx

/ p> xxx


1 commentaires

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 :-)



3
votes

avec gnu awk. Utilisez : et - comme séparateur de champ et sortie secondaire secondaire: xxx

sortie: xxx


6 commentaires

Cela donnera un résultat erroné si l'entrée est "Net-Backend: POM: 0.0.220"


@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 , 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 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 (toujours 3 champs)


@anubhava, je n'ai jamais entendu l'expression une ligne de dépendance de la note , comment savez-vous quelle est ce que cette entrée est par opposition à des données : -Separated?


Un exemple de ligne de mon build.gradle est compile ('com.google.guava: goyava: 29.0-jre') où la dépendance est définie dans ce format groupe : Nom: version


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.



3
votes

Pourriez-vous essayer de suivre, écrit et testé avec des échantillons montrés dans GNU awk xxx

2ème solution: < / em> avec sed xxx


0 commentaires

0
votes

awk, match code> et regex: xxx pré>

sortie: p> xxx pré>

s'il y a plusieurs correspondances sur ligne, vous devez envelopper un pendant code> autour de celui-ci: p>

0.0.1
0.0.2


0 commentaires