2012-07-25 3 views
32

В любом случае вы можете сделать группу соответствия регулярных выражений с помощью sed, например, java regex pattern/match/group?sed - как сделать группы регулярных выражений с помощью sed

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

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

как я использую СЭД только, чтобы получить результат, как:

test-artifact-0.1-SNASHOT.jar 

Я задаюсь делает СЭД позволит вам сделать что-то вроде Java регулярных выражений, вы определить шаблон, как:

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

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

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

http://stackoverflow.com/questions/2777579/how-to-output-only-captured-groups-with-sed –

ответ

55

Вы должны бежать круглые скобки для группирования выражений:

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

и использовать их с \1, \2 и т.д.


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

+18

С помощью GNU 'sed' вы можете избежать всех экранированных скобок, используя расширенные регулярные выражения. Используйте переключатель '-r' для этого. – Thor

+0

'-E' также работает в GNU и не нуждается в том, чтобы избежать парнеров. – abalter

15

Это то, что Birei и Thor означают:

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 
6

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 
2

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

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

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

Примечание: для этого потребуется знать точное положение поля.

Смежные вопросы