我有几个文本文件,我在其中引入了 shell 变量(例如 $VAR1 或 $VAR2)。
我想把这些文件(一个一个)保存到所有变量都被替换的新文件中。
为此,我使用了以下 shell 脚本(可在 StackOverflow 上找到):
while read line
do
eval echo "$line" >> destination.txt
done < "source.txt"
这对非常基本的文件非常有效。
但是在更复杂的文件上,“eval”命令做的太多了:
跳过以“#”开头的行
解析 XML 文件会导致大量错误
有没有更好的方法呢? (在 shell 脚本中......我知道这很容易用 Ant 完成)
亲切的问候
最佳答案
看,原来我的系统上有一个 envsubst
命令,它是 gettext-base 包的一部分。
所以,这很容易:
envsubst < "source.txt" > "destination.txt"
请注意,如果您想对两者使用相同的文件,则必须使用类似 moreutil 的 sponge
的文件。 ,正如 Johnny Utahh 所建议的那样:envsubst < "source.txt" | sponge "source.txt"
. (因为 shell 重定向会在读取之前清空文件。)
关于linux - 如何在复杂的文本文件中替换 shell 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14155596/