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