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

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 bashset -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.mrgr.cn/news/25974.html

相关文章:

  • 基本数据结构:“树”的简单介绍
  • Elasticsearch Java API 针对 Geohash7 网点进行分桶聚合
  • 操作系统 ---- 调度算法【先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRRN)】
  • 光控资本:贵州茅台创阶段新低!有色龙头飙升,超跌优质资源股揭秘
  • 【C++基础概念理解——std::invoke()函数基础知识】
  • uts+uniapp踩坑记录(vue3项目
  • LEETCODE 每日一题 (单调栈 +滑动窗口模拟)
  • 什么是数字签名?
  • 【Python】从基础到进阶(七):深入理解Python中的异常处理与调试技巧
  • learn C++ NO.16——模板
  • 开放式耳机哪些品牌值得推荐?开放式耳机是什么意思?
  • P5043 [BJOI2015]树的同构(树哈希模版)
  • 【鸿蒙开发从0到1 day10】
  • 美创获评CNVD年度原创漏洞发现贡献单位!
  • springboot-创建连接池
  • 派遣函数 - 跟踪IRP的利器/RPTrace
  • 新书速览|JavaScript前端开发与实例教程(微课视频版)(第2版)
  • Kafka 实战演练:创建、配置与测试 Kafka全面教程
  • 最好用的 Redis 可视化工具,不愧是官方出品,功能确实强大(带私活源码)
  • element select + tree