Доброго времени суток to all.
Довольно часто приходится разбирать текстовые файлы, синтаксисом похожие на ini. «похожие» потому, что секции могут иметь другой вид (но явно выражены). Значение полей может отбиваться от их имени с помощью ":", вместо стандартного «=».
Пример секции:
ready >>> sh d SomeDevice
deviceType = deviceModel
ipAddress = x.x.x.x
port = 5060
userName =
И, собственно, задача - распарсить такие файлы и занести соответствующие данные в БД (mysql). Сейчас пользуюсь довольно громоздкими конструкциями вида:
echo "insert into db.table (deviceName, deviceIp) values"
grep "(ready >>>|ipAddress)" "входящий файл" | sed -e 's/ready >>> sh d /section = /' | while read str; do
echo "$str" | grep -q "section" && echo ""
echo -n "$str; "
done | while read infoStr; do
# infoStr - это строка, похожая на:
# section="имя секции"; param1="value1"; param2=value2;
section=""
param1=""
param2=""
eval "${infoStr}"
echo "('${section}', '${param1}', '${param2}'), "
done
Sql, генерируемый таким скриптом для секции из примера выше:
insert into db.table (deviceName, deviceIp) values
('SomeDevice', 'x.x.x.x'),
В итоге я получаю некоторый длинный запрос, который и выполняется в дальнейшем.
Так вот. Мб вместо таких чудовищь есть какое-нибудь «средство», которое бы позволило более проще обрабатывать «ini»-файлы?