Изменить настройки файла конфигурации из 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 для замены многострочной строки?

Другие вопросы по тегам