一尘不染

如何在复杂的文本文件中替换shell变量

linux

我有几个文本文件,其中介绍了shell变量(例如$ VAR1或$ VAR2)。

我想将这些文件(一个接一个)保存在新文件中,其中所有变量都将被替换。

为此,我使用了以下shell脚本(可在StackOverflow上找到):

while read line
do
    eval echo "$line" >> destination.txt
done < "source.txt"

这在非常基本的文件上效果很好。

但是在更复杂的文件上,“ eval”命令执行的操作过多:

  • 跳过以“#”开头的行

  • XML文件解析导致大量错误

有更好的方法吗?(在shell脚本中……例如,我知道这很容易用Ant完成)

亲切的问候


阅读 408

收藏
2020-06-02

共1个答案

一尘不染

看,原来我的系统上有一个envsubst命令是gettext-base包的一部分。

因此,这很容易:

envsubst < "source.txt" > "destination.txt"

请注意,如果您想为两者使用相同的文件,则必须使用moreutil’s之类的东西sponge,如Johnny Utahh所建议envsubst < "source.txt" | sponge "source.txt"。(因为shell重定向会在读取之前清空文件。)

2020-06-02