sed - как создавать регулярные выражения, используя sed
Есть ли в любом случае вы можете сделать группу соответствия регулярному выражению, используя sed, как шаблон регулярного выражения java / match / group?
если у меня есть строка как
test-artifact-201251-balbal-0.1-SNAPSHOT.jar
Как я могу использовать Sed просто, чтобы получить результат, как:
test-artifact-0.1-SNASHOT.jar
Мне интересно, позволяет ли sed делать что-то вроде регулярных выражений Java, вы определяете шаблон следующим образом:
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)
и тогда вы можете получить результаты в виде массива, например:
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
4 ответа
Вы должны избегать скобок для групповых выражений:
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)
И использовать их с \1
, \2
, так далее.
РЕДАКТИРОВАТЬ: Также обратите внимание, прежде чем SNAPSHOT
тот [.]
не будет соответствовать. Внутренние скобки .
буквально. Так должно быть [0-9.-]*
Вот что значат Бирей и Тор:
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
На самом деле, 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
Если вы ищете более простой способ, я думаю, это может быть вашей помощью!:)
echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6
"-" используется в качестве разделителя, и поля 1,2,5,6 печатаются.
Примечание. Для этого необходимо знать точное положение поля.