Мне нужно изменить файл конфигурации из сценария bash, изменив значения определенных параметров. Мне нужно внести изменения, используя обычные инструменты Linux (sed / awk / tr / и т. Д.). Конфигурационный файл может иметь ключи с одинаковыми именами в разных строфах, например:
[section1]
key1=a
key2=b
[section2]
key1=a
key2=b
и строки в каждой строфе могут быть в разном порядке, с пустыми строками / комментариями между ними и т. д. Я пробовал sed, но не могу сопоставить строки (поэтому я не могу сопоставить имена строф). Может кто-нибудь подсказать, как: 1. изменить значение, связанное с ключом section1? 2. Вывести в стандартный вывод значение, связанное с section1 key1?
Похоже на задание Augeas, который разбивает файл на разделы и настройки в редактируемой иерархии. Это не совсем стандартный инструмент, поскольку он, вероятно, не будет установлен в данной системе по умолчанию, но будет доступен в виде пакета для большинства Linux.
Вы можете сделать это с помощью ex и здесь скрипта. Для вашего простого примера:
ex $conf <<-EOF
/^\[section1\]
/^key1=
s/=a/=c/
wq
EOF
Вы сначала ищите заголовок строфы, затем имя переменной, а затем изменяете настройку только в этой строке.
Вы можете использовать sed для сопоставления нескольких строк; здесь есть отличный пост: Как я могу использовать sed для замены многострочной строки?