[РЕШЕНО] Sed, или как получить значение из INI файла?

Доброго времени суток.

Задача пустяковая, но что-то я запарился. 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" без лишних символов), но:
  1. Используя при возможности только sed, т.к. он шустрее всех (или есть другой, лучший вариант?);
  2. В различных ситуациях у нас различные символы завершения строки (\r || \n || \r\n || \n\r);
  3. Желательно - в одну строку, без излишних костыльных преобразований.


Решение:
## 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");
  • Вопрос задан
  • 3269 просмотров
Решения вопроса 1
merryjane
@merryjane
Системный администратор
Вам надо просто из трех строк найти строку содержащую param2 и забрать значение?
Если да, то попробуйте так:
awk -F '=' '/param2/ {print $2}'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега Linux
Любые ответы на любые вопросы
Как-то так:
IFS="="
while read -r name value
do
echo "Content of $name is ${value//\"/}"
done < filename

Оригинал ответа
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы