我正在尝试编写一个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 '{{.*}}' > temp

while read placeholder; do

varName=$(echo "$placeholder" | tr -d '{}')

value="${!varName}"

sed -i "s/$placeholder/$value/g" "$file"

done < temp

rm -rf temp

解决方法:

我用Perl:

perl -pe 's/{{(.*?)}}/$ENV{$1}/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的环境变量的值,它是之前捕获的组.

标签:bash,linux,sed,awk

来源: https://codeday.me/bug/20190612/1222857.html

linux同名文件没有自动替换,linux – bash脚本替换文件中出现的所有占位符相关推荐

  1. 编写Bash脚本获取文件夹下文件名和扩展名

    前言 很多时候我们可能需要获取文件夹下的文件名和扩展名用于任务处理,此时可以通过编写Bash脚本来实现. 实现 result_path1=task1 result_path2=task2 concat ...

  2. linux一运行大文件就自动重启,Linux之systemd服务配置及自动重启

    layout: post title: Linux之systemd服务配置及自动重启 date: 2019-09-09 tags: linux --- Linux之systemd服务配置及自动重启 0 ...

  3. Linux:驱动之自动创建字符设备的设备文件(未完)

    自动创建字符设备的设备文件 目前尚不是最终版本,还望有心人自己学习的时候,把自己整合的知识点相关的答案也好问题也好,或者实践过程中的一些操作截图,再或者其他的一些想要分享材料发给笔者邮箱:uestc_ ...

  4. linux shell 语句出错自动退出 调试 检查 脚本

    许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让bash脚本变得 ...

  5. linux嵌套字幕工具,Linux(NAS通用)下自动匹配射手字幕脚本

    2014/02/17更新:加入因超时致使获取字幕不成功的情况. 2014/02/15更新:优化了脚本,充分考虑获取字幕失败后的情况,保证在下次运行时还能再次获取上次失败的字幕. 从头学起,用了一天的时 ...

  6. 在linux中编写shell脚本文件,如何编写简单的Shell脚本(Script)文件之Linux的基本操作...

    如何编写简单的Shell脚本(Script)文件之Linux的基本操作 新建一个文本文件包含所需要的脚本.举例,我会使用pico编辑器写一个脚本用来运行程序tar,带上必要的可选项可以用来解压从因特网 ...

  7. linux清理缓存_自动清理linux系统内存和Cache方法

    1.手动清理内存和Cache方法 Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total ...

  8. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本

    我正在编写一个自动安装和配置AWS CLI工具的bash脚本.我可以安装AWS CLI工具,但无法配置它. 我的脚本是这样的: #!/bin/bash wget https://s3.amazonaw ...

  9. lftp压缩对方服务器文件,lftp 贴心好友 备份服务器bash脚本

    lftp 贴心好友 备份服务器bash脚本 利用了 bash 和 lftp 的自动登录功能 lftp 支持 ftp ssh 等多种登录协议 复制代码 代码如下: #!/bin/bash echo &q ...

最新文章

  1. 如何使用日志进行程序调试_如何使用日志节省调试时间
  2. 如何查看仅一个用户提交的git日志?
  3. python yield和yieldfrom,Python:对于yield与yield from 的理解
  4. rxjs 里的map operator
  5. [原]TCP/UDP使用细节备忘
  6. 美部长施压堵华为,遭印度电信巨头现场驳斥 ;WhatsApp被曝漏洞:仅凭一张GIF动图黑客便可接管账户……...
  7. oracle用户密码复杂度查询,11gR2 Database用户密码复杂度验证
  8. 手把手教你在Linux上安装CUDA9.0(以及如何避开所有的坑)
  9. wiley期刊AMA-lato,latex字体安装问题
  10. gp338信令_细说GP338GP328对讲机编程
  11. sap代加工流程图_委外加工_SAP的两种典型委外处理方法
  12. IE、Chrome浏览器主页被hao123或360篡改简单有效解决办法
  13. 游狼html鼠标,《速评13》65g极轻FPS鼠标游狼SK
  14. linux安装tomcat,菜鸟教程
  15. 【刷题】微软高频题总结
  16. JSP书香味道点餐系统课设
  17. 森林防火指挥系统截图
  18. 手机号码归属地查询api接口
  19. C语言题目“数字菱形”
  20. 安装VS2003出现问题——Microsoft FrontPage 2000 Web 扩展客户端安装不成功 及其解决方法

热门文章

  1. java多线程测试框架(含入参和返回值)
  2. python两个切片合并_Python中numpy的布尔判断、合并、切片及一般函数,通用
  3. java通过ssh读取日志_IDEA+java通过SSH来进行分析日志,实现UI自动化动态验证码登录...
  4. php登录半透明,WordPress透明OAuth 1.0使用PHP登录
  5. 最近,又一家互联网公司裁员了,失业来得太突然…
  6. 垂垂老矣,一代人的回忆,Adobe Flash 寿命将尽
  7. 高可用 Prometheus 的常见问题
  8. 最华丽的 Kubernetes 桌面客户端:Lens
  9. 手绘风格的数据可视化 Sketchify,让你的图表也萌萌哒
  10. Spring Boot ApplicationContextRunner 测试指南