Sed - как сделать группы регулярных выражений с помощью sed

Есть ли в любом случае команда regex match group, использующая sed как java regex pattern/match/group?

если у меня есть строка вроде

test-artifact-201251-balbal-0.1-SNAPSHOT.jar

как я могу использовать sed, чтобы получить результат, например:

test-artifact-0.1-SNASHOT.jar

Мне интересно, делает sed, позволяя вам делать что-то вроде java regex, вы определяете шаблон как:

([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)

а затем вы можете получить результаты как массив:

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar

Ответ 1

Вам нужно вывести скобки в групповые выражения:

\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)

И используйте их с \1, \2 и т.д.


EDIT. Также обратите внимание, что перед SNAPSHOT, что [.] не будет совпадать. Внутренние скобки . являются буквальными. Это должно быть [0-9.-]*

Ответ 2

Это то, что означает Бирей и Тор:

sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"

Вывод:

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar

Ответ 3

infact для этой регулярной строки, awk может спасти вас от группировки.:)

вы просто указываете нужный номер индекса детали:

awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}' 

выход:

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

Ответ 4

Если вы ищете более простой способ, я думаю, это может вам помочь!:)

echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6

"-" используется как измеритель и печатаются поля 1,2,5,6.

Примечание. Это потребует, чтобы вы знали точное положение поля.