bash - 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
解决方案
对于第一个问题,预处理您的.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
推荐阅读
- sql - CHECK 约束失败
- java - 严重:上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错
- javascript - 如何从firebase(不是firestrore)中检索文档ID?
- ios - 与 `-s` 选项相比,LLDB 中`image lookup` 的`-n` 选项如何操作?
- html - 如果您调用 watchPosition 并更改页面而不调用 clearWatch 会发生什么?
- microsoft-teams - Microsoft Teams - 更新选项卡 URL
- google-sheets - 按月份分组的数据透视表中的堆积条形图?
- reactjs - 在父组件的 onClick 上一次又一次地添加子组件,每次都使用新的道具到子组件
- verilog - 时钟域交叉信号和抖动要求
- email - 自定义域电子邮件不适用于 Heroku