我有两个文件,配置和模板,我想用配置中的变量替换模板的部分内容:
config.txt 包含:
MYURL='www.google.com'
template.txt 包含:
url = MYURL
我用了
sed -e "s/MYURL/${replace}$MYURL/" template
但 config.txt 的变量仅在该文件中定义。我也尝试过使用
source config.txt
echo $MYURL
但它没有达到我想要的效果。我怎么能这样做呢?
答案1
一些评论只是为了说明为什么我稍后会使用 grep:
$ cat config.txt
/* blah blah yadda yadda */
/* look at me... I'm a text file, not a bash script... don't source me directly */
#MYURL='www.google.com'
MYURL='www.stackexchange.com'
$ cat template.txt
#url = example
url = MYURL
和脚本:
$ source <(grep -E "^[0-9A-Za-z]+=" config.txt)
$ echo $MYURL
www.stackexchange.com
$ sed -r -e "s/^url[ ]*=.*/url=${MYURL}/" template.txt
#url = example
url=www.stackexchange.com
(顺便说一句,我不知道你的 sed 脚本的意图是什么......我的有一个完全不同的方法,并且支持模板 url=... 和 url = ... 中带或不带空格,但你可以' config.txt 中没有空格,否则您无法获取它...无需再次将 sed 添加到我的 grep 中)
编辑:哦,我猜你想要的是用虚拟值而不是键来替换,如果你愿意的话,可以简单地这样做:
$ sed -r -e "s/MYURL/${MYURL}/" template.txt
#url = example
url = www.stackexchange.com