首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在复杂的文本文件中替换shell变量

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

Stack Overflow用户
提问于 2013-01-04 18:43:49
回答 11查看 143.2K关注 0票数 111

我有几个引入了外壳变量(例如$VAR1或$VAR2 )的文本文件。

我想把这些文件(一个接一个)保存到新文件中,所有的变量都会被替换。

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

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

这在非常基本的文件上工作得很好。

但是对于更复杂的文件,"eval“命令做得太多了:

跳过以"#“开头的

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

有没有更好的方法呢?(在shell脚本中...例如,我知道使用Ant很容易做到这一点)

亲切的问候

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-01-04 20:54:11

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

因此,这使得它变得很容易:

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

注如果你想对这两个文件使用相同的文件,你必须使用类似于moreutil的sponge,正如Johnny Utahh:envsubst < "source.txt" | sponge "source.txt"所建议的那样。(因为shell重定向将在读取文件之前清空该文件。)

票数 251
EN

Stack Overflow用户

发布于 2018-02-13 16:35:24

我知道这个话题很老了,但我有一个更简单的解决方案,不需要导出变量。可以是一个线条,但我更喜欢在线端使用\进行拆分。

var1='myVar1'\
var2=2\
var3=${var1}\
envsubst '$var1,$var3' < "source.txt" > "destination.txt"

#         ^^^^^^^^^^^    ^^^^^^^^^^     ^^^^^^^^^^^^^^^
# define which to replace   input            output

需要将变量定义为与envsubst相同的行,才能将其视为环境变量。

'$var1,$var3'是可选的,仅用于替换指定的only。假设一个输入文件包含不应该被替换的${VARIABLE_USED_BY_JENKINS}

票数 18
EN

Stack Overflow用户

发布于 2018-01-16 20:22:00

  1. 定义您的ENV变量

$ export MY_ENV_VAR=congratulation

  1. 使用以下content

创建模板文件(in.txt

$MY_ENV_VAR

您还可以使用系统定义的所有其他ENV变量,比如(在linux中) $TERM、$SHELL、$HOME……

  1. 运行此命令以raplace in.txt文件中的所有环境变量并将结果写入Run

$ envsubst "`printf '${%s} ' $(sh -c "env|cut -d'=' -f1")`" < in.txt > out.txt

  1. 检查out.txt文件的内容

$ cat out.txt

你应该看到“恭喜”。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14155596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档