首页 > 解决方案 > bash 读取和写入具有不寻常布局的配置文件

问题描述

问题 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

标签: bashkeyconfigkey-valuequotation-marks

解决方案


对于第一个问题,预处理您的.cfg文件,然后阅读它,如下所示:

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

现在,您的所有name_1,name_2对都可用于您的 shell 脚本。

对于第二个问题,这样做:

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

推荐阅读