Чтобы дать некоторый контекст, у меня есть задача сервера сборки, которая требует обновления значения поля файла конфигурации (в формате yaml) и отправки в репо, которое будет использоваться позже. Моей немедленной мыслью было использовать некоторую форму поиска / замены регулярных выражений, но я ' Мне интересно, есть ли другие / лучшие способы сделать это?
то есть:
# Before
my_field : 2
# After
my_field : 3.1
Конечно, файл будет содержать другие поля со значениями, которые необходимо оставить без изменений.
РЕДАКТИРОВАТЬ
Итак, согласно предложению rbtux, я нашел модули ruby yaml, которые решают мою проблему. Вот как это работает:
source.yaml:
---
some_value: 1
my_value: 2
new_value: 3
replace.ruby:
require 'yaml'
hiera = YAML.load_file('source.yaml');
hiera['my_value'] = "other data"
File.open('source.yaml','r+') do |h|
h.write hiera.to_yaml
end
puts hiera['my_value'] # outputs my_value as 'other data' with other variables intact
Вы можете расширить это, чтобы передать значение в качестве аргумента.
Лучшим способом было бы выбрать язык сценариев perl, python, ruby и т. д., который предоставляет утилиты для работы с yaml.
если файл достаточно прост, вы можете обойтись с помощью sed-хака:
sed 's/^\(\s*my_field\s*:\s*\).*/\1new-value/'