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.
Примечание. Это потребует, чтобы вы знали точное положение поля.