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

标签 linux shell string-interpolation

我有几个文本文件,我在其中引入了 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/

相关文章:

python - 使用 sys.stdin.readline() 通过 "| bash "运行 python 脚本

javascript - 插入 React Link 组件并将其作为 prop 传递

linux - 如何在Linux框中使用IP地址获取Windows用户名详细信息

javascript - 用于 React 的 Webpack 不起作用

linux - 嵌入 bash 命令

scala - 将长准引号匹配器存储在变量中

string - 带格式的 Scala 字符串插值,如何更改语言环境?

linux - OpenStack 虚拟机公共(public) IP 上的 Mesos

linux - 32位Linux汇编代码

bash - 如何在 bash 中获取一个字符串并将其拆分为 2 个变量?