问题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
答案 0 :(得分:0)
对于第一个问题,请先对您的.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