从命令行完成文件

Complete file from command line

我有一种情况想以临时方式完成配置文件。我想通过执行 bash 脚本来做到这一点。

初始文件将被称为 conf.ini,看起来像:

[dev]
parameter_dev = <value_dev>
[test]
parameter_test = <value_test>

我想执行一个脚本,该脚本能够将 替换为它们在命令行中给出的真实值。

解决这个问题最简单的方法是什么?

要更新 config.ini,可以使用 stream-editor sed 就地编辑 config.ini 并替换 <value_dev><value_test>使用您喜欢的任何值。为此,您将使用正常的替换形式 s/find/replace/ 并且您将在替换之前包含一个模式匹配,以便仅在行的开头与模式匹配时才执行替换。例如,对于 <value_dev>,您可以使用如下表达式:

sed -i -e '/^parameter_dev/s/<value_dev>/real_dev_value/' conf.ini

with只匹配以"parameter_dev"开头的行,然后会在该行中找到<value_dev>并替换为real_dev_value。如果您从脚本中调用它并想用变量 $real_dev_value 中包含的值替换,那么您必须使用 double-quotes 而不是 single-quotes 以便 variable-expansion地点。

您只需添加另一个表达式即可在一次调用中处理两个替换,例如

sed -i -e '/^parameter_dev/s/<value_dev>/real_dev_value/' -e \
          '/^parameter_test/s/<value_test>/real_test_value/' conf.ini

选项 -i 告诉 sed 编辑文件 in-place。每个 -e 选项都会引入一个要应用于文件的新表达式。

如果使用变量替换值,允许变量扩展的 double-quoted 形式为:

sed -i -e "/^parameter_dev/s/<value_dev>/$real_dev_value/" -e \
          "/^parameter_test/s/<value_test>/$real_test_value/" conf.ini

使用固定字符串或变量进行替换的任何一种形式都可以在命令行上使用或从脚本中调用。

如果您有任何问题,请告诉我。