Led пишет: > On Tuesday 04 August 2009 20:07:19 Aleksey Avdeev wrote: >> Michael Shigorin пишет: >>> On Tue, Aug 04, 2009 at 07:29:54PM +0400, Aleksey Avdeev wrote: >>>> Похоже начало вытанцовываться что-то похожее. Если использовать >>>> прилагаемый макрофайл (см. вложение), то: >>>> >>>> Release: %distr_auto_release [.] >>> IMHO чуточку лучше бы >>> >>> Release: %distro_release ... >>> >>> или вообще >>> >>> Release: %branch_release ... >> OK. Тогда и остальные макросы в %branch_switch и %branch_release_num, >> для единообразия. >> >>>> PS: Данный вариант мне нравиться дольше, чем используемый >>>> сейчас. Думаю запаковать его. Прошу предлагать более внятные >>>> названия для макросов и/или самого пакета. >>> Да, вполне симпатично. >>> >>>> #auto_distr macros >>>> >>>> # release format: [.] >>>> %distr_auto_release() %(if [ "%{?distr_switch}" = "" ]; then echo "%1"; >>>> else echo "%1"|sed -rn -e >>>> 's@^([^[:space:]]+)([0-9]+)(|(\\.[^[:space:]]+))$@\\1/\\2/\\3@p'|awk -v >>>> FS='/' -v distr_name='%{?distr_switch}' -v distr_num='%{?distr_num}' >>>> 'BEGIN {if (distr_num == "") {num="1"} else {num=distr_num}; suf=("." >>>> distr_name "." num) }; {print $1 ($2-1) suf $3}'; fi) >>> Что-то подсказывает, что вместо if, echo, sed и awk можно >>> обойтись просто awk; с другой стороны, так экономится пара >>> циклов в тривиальном случае... :) >> Вариант избавится от sed напрашивается. Но я не придумал, как в awk с >> помощью регулярного выражения разрезать строку на 3 переменных: > > split() Не понял как применить со сложным регекспом. То что придумал: $ echo alt2|awk '{split($0, a, "^([^[:space:]]+)([0-9]+)(|(\\.[^[:space:]]+))$");print "a[1]=" a[1] " a[2]=" a[2] " a[3]=" a[3]}' возвращает: a[1]= a[2]= a[3]= А мне нужно (при alt2 на входе) получить на выходе: a[1]=alt a[2]=2 a[3]= Кой для этого нужен регексп для split? -- С уважением. Алексей.