当前位置: 首页 > article >正文

shell脚本中sed命令如何使用变量

在shell脚本中我们常常需要使用sed命令进行配置文件的更新,但是更新的内容又往往根据环境相关。值并不是固定的。

这里我们介绍一种在sed命令中使用变量的方法。

比如,在nginx的配置中,我们需要根据环境来更新/etc/nginx/sites-available/default中的目录配置。

通常我们采用一个变量,来记录当前环境需要配置的目录比如:
dist_dir=/home/dev/code/ui/dist
这个目录也是index.html文件所在的目录。
需要在/etc/nginx/sites-available/default文件中更新此目录,方法如下:

#!/usr/bin/env bash

set -eu
set -o pipefail
dist_dir=/home/dev/code/ui/dist
string_command="s!^ *root .*;!        root ${dist_dir};!"
sed -i "$string_command" /etc/nginx/sites-available/default

这里说明如下:

  1. 因为文件中还有匹配root的其它行,因此使用^ *root .*来匹配以零个或多个空格开始,接着是root字符串,后面跟任意字符序列的行,这样就能匹配到一个目标行
  2. 因为变量中包含/ 这里使用不会遇到!来替换默认的/作为分隔符

这里本来想写成一个语句,类似

sed -i '' 's/^ *root .*/       root "${dist_dir}";/' /etc/nginx/sites-available/default

的形式,尝试了多种手段,不是报错就是执行效果总是与预期不一致,原因可能在于sed命令是硬编码,具体原因不详,有知道的大神请指教!!
因此拆成2个语句进行实现,如果您有更好的方法,欢迎评论。


http://www.kler.cn/news/307178.html

相关文章:

  • 开发适合el-dialog的拉伸拖拽自定义指令和适配自定义的图片查看组件
  • 从主流技术架构视角剖析 Java Web 项目的性能测试策略与挑战
  • 研1日记13
  • unity3d入门教程六
  • 校验(网络传输)
  • PHP环境搭建
  • 函数模板(初阶)
  • VuePress搭建文档网站/个人博客(详细配置)之站点配置
  • 海鲜市场|基于springboot的网络海鲜市场系设计与实现(附项目源码+论文+数据库)
  • item_get京东获取商品详情SKU数据接口||关于京东商品采集接口
  • Kubernetes 网络
  • 【C++】——list
  • 103.WEB渗透测试-信息收集-FOFA语法(3)
  • k8s中的lables和matchlables的作用
  • 54. 螺旋矩阵(定义四个方向然后遍历类)
  • 腾讯云升级多个云存储解决方案 以智能化存储助力企业增长
  • Java 入门指南:JVM(Java虚拟机)—— Java 类加载器详解
  • 【QGC】把QGroundControl地面站添加到Ubuntu侧边菜单栏启动
  • ElementUI 布局——行与列的灵活运用
  • Vue3 + Echarts 实现中国地图
  • 大数据处理技术:MapReduce综合实训
  • 【SSRF漏洞】——gopherus工具伪造
  • sqli-labs靶场自动化利用工具——第10关
  • 上汽大众:存储成本节约85%,查询性能提升5倍|OceanBase案例
  • 【Multi-UAV】多无人机实现凸多边形区域覆盖--Voronoi分割
  • Mysql树形结构表-查询所有子集数据
  • 【OJ刷题】快慢指针问题
  • ARM驱动学习之基础小知识
  • Windows环境本地部署Oracle 19c及卸载实操手册
  • STL-vector练习题