regex - 用相应的环境变量替换占位符

标签 regex bash ubuntu sed environment-variables

我有一个带有像这样的占位符的配置文件(存储在 /tmp/var 对于这个例子)

ldap_bind_dn='${bind_dn}'
现在我想替换 ${bind_dn}使用同名的环境变量(在 Docker 中设置)。
export $bind_dn=CN=my-user,CN=Users,DC=example,DC=com
处理上述测试文件后的预期结果将是
ldap_bind_dn='CN=my-user,CN=Users,DC=example,DC=com'
我试过sed但它不会将其替换为 env 变量的值
$ sed "s#\${\(.*\)}#$\1#" /tmp/var 
bind_dn='$bind_dn'
为什么sed替换为 $bind_dn而不是值(value)?我希望变量被处理,因为我没有逃脱 $符号。
表达式本身有效,只有替换无效:
$ sed "s#\${\(.*\)}#test123#" /tmp/var 
bind_dn='test123'
当目标变量被硬编码时,替换也正确完成
$ sed "s#\${\(.*\)}#$bind_dn#" /tmp/var 
bind_dn='CN=my-user,CN=Users,DC=example,DC=com'
但由于我们有一堆配置变量,我想自动替换格式为 ${NAME} 的所有环境变量。自动地。

最佳答案

不是最优雅的解决方案,但这个解决方案适用于 bash:

sed 's#\${\(.*\)}#`{echo,"$\1"}`#' /tmp/var | xargs -n1 -I{} echo echo "{}" | bash -s
这有点棘手,因为您需要 bash 执行变量替换,这就是为什么我将它传送到 bash -s

关于regex - 用相应的环境变量替换占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62591101/

相关文章:

正则表达式仅匹配 10 或 12 位数字

regex - RegEx表达式将捕获两个字符之间的所有内容,包括多行 block

c# - 用换行符提取文本

linux - 从文件夹中的选择文件类型创建符号链接(symbolic link)

python - Barabasi-Albert模型的度分布

regex - 限制 regsub 命令的数量以删除列表中的空格、行尾或回车符

python - linux 可执行文件不工作但脚本在 python 中工作

mysql查询在两个不同的系统上返回不同的结果

python - 在 Ubuntu Mate (Raspberry Pi 3) 和 python 中使用多个超声波传感器

linux - BASH 和/或 .BASHRC 在 SU 或 SSH 登录后无法正常工作,除非运行 "bash"命令