linux – bash脚本替换文件中出现的所有占位符

linux – bash脚本替换文件中出现的所有占位符,第1张

概述我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件…… This is an {{VAR1}} {{VAR2}}.It should work across multiple lines in this {{VAR2}}. …我设置了以下环境变量: VAR1='example'VAR2='file' 在我的文件上运行脚本后,我应 我正在尝试编写一个bash脚本,用一个同名环境变量替换文件中所有出现的占位符.举个例子,如果我有一个像下面这样的文件……

This is an {{VAR1}} {{VAR2}}.It should work across multiple lines in this {{VAR2}}.

…我设置了以下环境变量:

VAR1='example'VAR2='file'

在我的文件上运行脚本后,我应该得到输出:

This is an example file.It should work across multiple lines in this file.

我确定必须有一个使用awk / sed的解决方案,但到目前为止,如果一条线路上有多个变量,我最接近的就无法处理.这是我到目前为止的尝试:

cat example.txt | grep -o '{{.*}}' > tempwhile read placeholder; do  varname=$(echo "$placeholder" | tr -d '{}')  value="${!varname}"  sed -i "s/$placeholder/$value/g" "$file"done < temprm -rf temp
解决方法 我用Perl:

perl -pe 's/{{(.*?)}}/$ENV{}/g' filename

这假设VAR1和VAR2是环境变量(即导出),因此Perl可以从环境中选择它们.任何非纯壳的方法都需要这样做;我只是提到它以避免混淆.

其工作原理如下:

> s / pattern / replacement / g是替换命令;你可以从sed认出来.不同之处在于,我们可以使用Perl更强大的正则表达式引擎和变量. g标志使得所有匹配都被替换;没有它,它只适用于第一个.>在模式中,.*?非贪婪地匹配,以便在包含foo {{VAR1}} bar {{VAR2}} baz的行中,模式{{.*?}}仅匹配{{VAR1}}而不是{{VAR1}} bar {{VAR2}}.>捕获{{和}}之间的部分,因为它位于()之间,可以重新用作$1替换中的$ENV {$1}使用包含Perl进程环境的特殊%ENV哈希. $ENV {$1}是名为$1的环境变量的值,它是之前捕获的组.

总结

以上是内存溢出为你收集整理的linux – bash脚本替换文件中出现的所有占位符全部内容,希望文章能够帮你解决linux – bash脚本替换文件中出现的所有占位符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存