Назад | Перейти на главную страницу

Измените настройки файла конфигурации из bash

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