Russian Qt Forum
Май 06, 2024, 05:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [shell] string parse  (Прочитано 4642 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Апрель 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"

Есть идеи как это реализовать? Спасибо.
Записан
Steven_Orko
Гость
« Ответ #1 : Апрель 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.