web-dev-qa-db-fra.com

sed - comment faire des groupes regex en utilisant sed

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
37
Shengjie

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.-]*

59
Birei

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
16
Steve

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
6
Kent

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.

2
SAM80DEV