为了账号安全,请及时绑定邮箱和手机立即绑定

如何在文本文件中替换$ {}占位符?

/ 猿问

如何在文本文件中替换$ {}占位符?

123456qqq 2019-12-10 10:00:39

我想将“模板”文件的输出通过管道传递到MySQL,该文件具有${dbName}散布的变量。替换这些实例并将输出转储到标准输出的命令行实用程序是什么?



查看完整描述

3 回答

?
幕布斯6054654

给定template.txt:


数字是$ {i}

这个词是$ {word}

我们只需要说:


sed -e "s/\${i}/1/" -e "s/\${word}/dog/" template.txt

感谢Jonathan Leffler的技巧,它可以将多个-e参数传递给同一sed调用。


查看完整回答
反对 回复 2019-12-10
?
慕尼黑8549860

更新资料

这是来自yottatsa的一个类似问题的解决方案,它仅替代$ VAR或$ {VAR}之类的变量,并且是简短的单行代码


i=32 word=foo envsubst < template.txt

当然,如果i和word在您的环境中,那只是


envsubst < template.txt

在我的Mac上,它看起来像是作为gettext的一部分并从MacGPG2安装的


旧答案

这是mogsie在类似问题上的解决方案的改进,我的解决方案不需要escale双引号,mogsie的需要,但是他只是一个衬里!


eval "cat <<EOF

$(<template.txt)

EOF

" 2> /dev/null

这两种解决方案的强大之处在于,尽管反斜杠是一个扩展名,但您只会得到几种类型的shell扩展,这些扩展通常不会发生$((...)),`...和$(...)。在这里转义字符,但是您不必担心解析存在错误,并且多行就可以了。

查看完整回答
反对 回复 2019-12-10
?
杨魅力

使用/bin/sh。创建一个小的shell脚本来设置变量,然后使用shell本身来解析模板。这样(编辑以正确处理换行符):


文件template.txt:

the number is ${i}

the word is ${word}

文件script.sh:

#!/bin/sh


#Set variables

i=1

word="dog"


#Read in template one line at the time, and replace variables (more

#natural (and efficient) way, thanks to Jonathan Leffler).

while read line

do

    eval echo "$line"

done < "./template.txt"

输出:

#sh script.sh

the number is 1

the word is dog


查看完整回答
反对 回复 2019-12-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信