如何替换文本文件中的占位符列表?

Chr*_*her 6 search text-processing replace

我有一个文本(配置)文件,但不幸的是,读取该文件的程序不允许使用任何类型的变量。所以我想使用一个预处理器,在将配置文件传递给程序之前替换配置文件中的一组占位符。

我可以以任何我想要的方式定义变量的格式(例如§SOME_DIR)。如果我只有几个变量,我可能会使用sed

sed  -e "s*§SOME_DIR*$SOME_DIR*g"  my.conf | target_prog
Run Code Online (Sandbox Code Playgroud)

但是变量列表很长,而且应该很容易配置 - 所以我更愿意把变量放在一个属性文件中,比如

SOME_DIR=...
OTHER_DIR=...
...
Run Code Online (Sandbox Code Playgroud)

然后打电话

some_replace_tool  my.properties  my.conf  | target_prog
Run Code Online (Sandbox Code Playgroud)

我正在寻找“some_replace_tool”。有任何想法吗?

man*_*ork 1

简单宏扩展最广泛、最可移植的方式可能是 C 预处理器:

cat my.properties my.conf | cpp -P -DSOME_DIR=/a/b -DOTHER_DIR=/c | target_prog
Run Code Online (Sandbox Code Playgroud)

请注意,您必须cat在此处使用,因为cpp仅接受一个输入文件作为参数。

但正如您所写,您有很多变量,您可能更喜欢将它们放入文件中:

#define SOME_DIR /a/b
#define OTHER_DIR /c
Run Code Online (Sandbox Code Playgroud)

然后将其传递给cpp

cat my.properties my.conf | cpp -P -imacros definition.cpp | target_prog
Run Code Online (Sandbox Code Playgroud)