Доброго времени суток.
Задача пустяковая, но что-то я запарился. Bash скрипт, парсим INI-файл. Получаем содержимое секции:
## 1. Get section content (text between '[%section_name%]' and next '[')
## 2. Remove lines, what begins on '['..
## 3. Remove empty lines
sectionContent=$(sed -n '/^\['$SectionName'\]/,/^\[/p' $mainVerFile | sed -e '/^\[/d' | sed -e '/^$/d');
В итоге работаем с примером:
param1=value1
param2=value2
param3=value3
Теперь необходимо просто получить значение "
param2" (результат должен быть "
value2" без лишних символов), но:
- Используя при возможности только sed, т.к. он шустрее всех (или есть другой, лучший вариант?);
- В различных ситуациях у нас различные символы завершения строки (\r || \n || \r\n || \n\r);
- Желательно - в одну строку, без излишних костыльных преобразований.
Решение:
## Parse data from passed content of ini section
function getValueFromINI() {
local sourceData=$1; local paramName=$2;
## 1. Get value "platform=%OUR_VALUE%"
## 2. Remove illegal characters
echo $(echo "$sourceData" | sed -n '/^'$paramName'=\(.*\)$/s//\1/p' | tr -d "\r" | tr -d "\n");
}
sectionContent=$(sed -n '/^\[GENERAL_SECTION\]/,/^\[/p' $pathToIniFile | sed -e '/^\[/d' | sed -e '/^$/d');
param1=$(getValueFromINI "$sectionContent" "param1");
param2=$(getValueFromINI "$sectionContent" "param2");
param3=$(getValueFromINI "$sectionContent" "param3");