чтение bash и запись файла конфигурации с необычной раскладкой - PullRequest
0 голосов
/ 19 марта 2019

Вопрос 1 У меня есть файл конфигурации, написанный программой, который я хочу перезаписать значения, запустив скрипт в терминале.

Файл конфигурации выложен примерно так (возможно, для этого формата есть имя, но я не знаю, что это):

name_1 = "value1"
name_2 = "value2"
...

Лишние пробелы, по-моему, являются причиной проблемы, когда я пытаюсь прочитать значения в моем файле сценария, когда я получаю сообщение об ошибке «команда не найдена» для каждого имени.

Могу ли я в любом случае включить этот файл в мой скрипт bash, чтобы он понимал, что каждая строка является переменной?

Вопрос 2 Как я могу перезаписать значения отдельных строк в этом файле с одинаковым форматированием? Кавычки в файле конфигурации запутали меня, а также пробел до и после символа =.

Будет ли работать следующее?

CONFIG_FILE=test.cfg
TARGET_KEY=$"name_1 "
REPLACEMENT_VALUE=" "true" "
sed -i "s/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/" $CONFIG_FILE

1 Ответ

0 голосов
/ 19 марта 2019

Для первого вопроса предварительно обработайте файл .cfg, а затем прочитайте его следующим образом:

CONFIG_FILE=test.cfg
sed 's/ = /=/g' < test.cfg > /tmp/processed.cfg
. /tmp/processed.cfg

Теперь все ваши пары name_1, name_2 будут доступны для вашегосценарии оболочки.

Для второго вопроса сделайте это так:

CONFIG_FILE=test.cfg
TARGET_KEY='name_1 '
REPLACEMENT_VALUE='"true" '
sed -i -e "s/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/" $CONFIG_FILE
...