【问题标题】:bash reading and writing a config file with an unusual layoutbash 读取和写入具有不寻常布局的配置文件
【发布时间】:2019-03-19 01:26:31
【问题描述】:

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

【问题讨论】:

  • 请避免把两个问题当作一个问题来问。
  • 欢迎来到 SO!请阅读how-to-ask 并根据说明更正您的问题。
  • 相关:How to parse and convert ini file into bash array variables? 为什么每个人都如此专注于让 bash 做它不太适合的事情?如今,到处都有 bash,也可能存在诸如 Python、Ruby 或 Perl 之类的高阶语言; Python 具有此内置功能(如链接中的一个答案所示),如果您不想使用包,则可以很容易地用另一种高级语言编写代码。

标签: bash key config key-value quotation-marks


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2011-02-08
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多