咨询Bash脚本里sed -i的作用、/s与/g含义及替换逻辑
Bash脚本中sed -i命令及/s、/g参数的解析
一、sed -i的作用
sed -i是sed工具的原地编辑选项,它会直接修改目标文件的内容,不需要将修改结果重定向到新文件。在你提供的脚本里,它的作用是把Redis哨兵配置文件sentinel.conf中的占位符替换为对应的环境变量值。
二、/s和/g的含义
- /s:是sed替换命令的标识,全称是
substitute,格式为s/匹配文本/替换文本/,用来指定执行文本替换操作。 - /g:全称是
global,表示全局替换。如果不加这个参数,sed只会替换每行中第一个匹配到的文本;加上后,会替换一行内所有匹配到的内容。在你的脚本场景里,因为每个占位符在配置文件中只出现一次,加不加/g效果一样,但加上是更规范的写法,避免后续配置中有多个相同占位符时漏替换。
三、具体的转换逻辑
原配置文件中的占位符
sentinel.conf里有三个带$的占位符:
port 26379 dir /tmp sentinel monitor redismaster redis-master 6379 $SENTINEL_QUORUM sentinel down-after-milliseconds redismaster $SENTINEL_DOWN_AFTER sentinel parallel-syncs redismaster 1 sentinel failover-timeout redismaster $SENTINEL_FAILOVER
脚本的替换行为
脚本中的三个sed命令,分别读取三个环境变量($SENTINEL_QUORUM、$SENTINEL_DOWN_AFTER、$SENTINEL_FAILOVER)的实际值,将配置文件中对应的占位符全部替换。
举个实际例子:
假设环境变量的值为:
export SENTINEL_QUORUM=3 export SENTINEL_DOWN_AFTER=30000 export SENTINEL_FAILOVER=180000
替换后的sentinel.conf内容会变成:
port 26379 dir /tmp sentinel monitor redismaster redis-master 6379 3 sentinel down-after-milliseconds redismaster 30000 sentinel parallel-syncs redismaster 1 sentinel failover-timeout redismaster 180000
最后脚本启动Redis哨兵服务,使用替换后的配置文件。
内容的提问来源于stack exchange,提问作者PeraltaLearns
相关产品推荐
相关产品推荐

