Reputation: 12796
Is there anyway you can do regex match group using sed like java regex pattern/match/group?
if i have string like
test-artifact-201251-balbal-0.1-SNAPSHOT.jar
how do I use sed just to get the result like:
test-artifact-0.1-SNASHOT.jar
I am wondering does sed allow you to do something like java regex, you define the pattern like:
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)
and then you can get the results as an array like:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
Upvotes: 58
Views: 79535
Reputation: 31
If you are searching for an easier way I guess this might be of your help! :)
echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6
"-" used as delimeter and fields 1,2,5,6 are printed.
Note: This would require you to know the exact position of the field.
Upvotes: 3
Reputation: 195179
infact for those regular string, awk could save you from grouping. :)
you just give the part index number you want:
awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}'
output:
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
Upvotes: 7
Reputation: 54512
This is what Birei and Thor mean:
sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"
Output:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
Upvotes: 25
Reputation: 36272
You have to escape parentheses to group expressions:
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)
And use them with \1
, \2
, etc.
EDIT: Also note just before SNAPSHOT
that [.]
will not match. Inside brackets .
is literal. It should be [0-9.-]*
Upvotes: 81