Russian Qt Forum

Программирование => Общий => Тема начата: Alex Custov от Апрель 14, 2009, 19:26



Название: [shell] string parse
Отправлено: Alex Custov от Апрель 14, 2009, 19:26
Есть строка с версией программы общего вида "MAJOR.MINOR[PATCHTYPEPATCHVERSION]", где

MAJOR - главная версия, число
MINOR - версия помельче, число
PATCHTYPE - тип подуровня (строго определённый набор - "ALPHA", "BETA", "RC"), строка
PATCHVERSION - версия подуровня, число

Необходимо это строку разобрать на переменные в шелл скрипте. Смотрел на awk с sed, они вроде не подходят для посимвольного парсинга. Perl не знаю, хотя чувствуется что использовать нужно его :) Использование шелла как интерпретатора строго определено, т.е. если даже решение этой задачи будет на перле, то должно быть через прямой его вызов, как php -r "code".

Т.е. в результате выполнение некоего кода для строки "1.05BETA2" в шелле должны стать доступны переменные например

$MAJOR == "1"
$MINOR == "5"
$PATCHTYPE == "BETA"
$PATCHVERSION == "2"

Есть идеи как это реализовать? Спасибо.


Название: Re: [shell] string parse
Отправлено: Steven_Orko от Апрель 20, 2009, 08:46
Накрапал на скорую руку. Может и не очень красиво. )))
Код:
#!/bin/bash

MAJOR=`/bin/echo $1 | /usr/bin/cut -f1 -d'.'`
PART02=`/bin/echo $1 | /usr/bin/cut -f2 -d'.'`

PATCHTYPE=`/bin/echo $PART02 | egrep -o '[A-Za-Z]{1,}'`

PART03=`/bin/echo $PART02 | sed "s/$PATCHTYPE/./g"`

MINOR=`/bin/echo $PART03 | cut -f1 -d'.'`
PATCHVERSION=`/bin/echo $PART03 | cut -f2 -d'.' `

echo "MAJOR=\""$MAJOR"\""
echo "MINOR=\""$MINOR"\""
echo "PATCHTYPE=\""$PATCHTYPE"\""
echo "PATCHVERSION=\""$PATCHVERSION"\""

Для проверки:

Код:
./<имя_файла> 01.08BETTA03