bash 读写布局异常的配置文件
bash reading and writing a config file with an unusual layout
问题 1
我有一个程序编写的配置文件,我想用 运行 终端中的脚本覆盖这些值。
配置文件的布局是这样的(这种格式可能有一个名称,但我不知道它是什么):
name_1 = "value1"
name_2 = "value2"
...
当我尝试读取脚本文件中的值时,我认为额外的 space 是导致问题的原因,因为每个名称都出现错误 "command not found"。
我是否可以将此文件包含在我的 bash 脚本中,以便它理解每一行都是一个变量?
问题 2
如何用相同的格式覆盖该文件中单行的值?配置文件中的引号让我感到困惑,还有=符号前后的space。
下面的方法行得通吗?
CONFIG_FILE=test.cfg
TARGET_KEY=$"name_1 "
REPLACEMENT_VALUE=" "true" "
sed -i "s/\($TARGET_KEY *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE
对于第一个问题,预处理您的 .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 *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE
问题 1 我有一个程序编写的配置文件,我想用 运行 终端中的脚本覆盖这些值。
配置文件的布局是这样的(这种格式可能有一个名称,但我不知道它是什么):
name_1 = "value1"
name_2 = "value2"
...
当我尝试读取脚本文件中的值时,我认为额外的 space 是导致问题的原因,因为每个名称都出现错误 "command not found"。
我是否可以将此文件包含在我的 bash 脚本中,以便它理解每一行都是一个变量?
问题 2 如何用相同的格式覆盖该文件中单行的值?配置文件中的引号让我感到困惑,还有=符号前后的space。
下面的方法行得通吗?
CONFIG_FILE=test.cfg
TARGET_KEY=$"name_1 "
REPLACEMENT_VALUE=" "true" "
sed -i "s/\($TARGET_KEY *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE
对于第一个问题,预处理您的 .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 *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE