Existe-t-il de toute façon que vous pouvez faire un groupe de correspondance regex en utilisant sed comme Java motif/correspondance/groupe regex?
si j'ai une chaîne comme
test-artifact-201251-balbal-0.1-SNAPSHOT.jar
comment utiliser sed juste pour obtenir le résultat comme:
test-artifact-0.1-SNASHOT.jar
Je me demande si sed vous permet de faire quelque chose comme Java regex, vous définissez le modèle comme:
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)
puis vous pouvez obtenir les résultats sous forme de tableau comme:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
Vous devez échapper les parenthèses pour regrouper les expressions:
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)
Et utilisez-les avec \1
, \2
, etc.
MODIFIER : Notez également juste avant SNAPSHOT
que [.]
ne correspondra pas. Crochets intérieurs .
est littéral. CA devrait etre [0-9.-]*
Voici ce que Birei et Thor veulent dire:
sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"
Sortie:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
en fait pour ces chaînes régulières, awk pourrait vous éviter de grouper. :)
vous venez de donner le numéro d'index de pièce que vous voulez:
awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}'
sortie:
kent$ echo "test-artifact-201251-balbal-0.1-SNAPSHOT.jar"|awk 'BEGIN{FS="-";OFS="-"}{print $1,$2,$5,$6}'
test-artifact-0.1-SNAPSHOT.jar
Si vous cherchez un moyen plus simple, je suppose que cela pourrait vous être utile! :)
echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6
"-" utilisé comme délimiteur et les champs 1, 2, 5, 6 sont imprimés.
Remarque: cela vous obligerait à connaître la position exacte du champ.