没有不值得去解决的问题,也没有不值得去学习的技术!

在 Rancher 容器升级时,执行 SHELL 脚本报错:sed: -e expression #1, char 37: unknown option to `s’ 的分析与解决

在 Rancher 容器升级时,执行 SHELL 脚本报错:sed: -e expression #1, char 37: unknown option to `s'

1、在 Rancher 容器升级时,执行 SHELL 脚本报错:sed: -e expression #1, char 37: unknown option to `s’,如图1

在 Rancher 容器升级时,执行 SHELL 脚本报错:sed: -e expression #1, char 37: unknown option to `s'
图1

2、在 环境变量 CMCP_API_CFG_REDIS_PASSWORD 的值为 q5dHP@xCBUUJY^L ,进而导致升级失败,将值修改为 q5dHP@xCBUUJYL ,去除其中的 ^ 符号,再次升级,升级失败

3、将值修改为 q5dHPxCBUUJY^L ,去除其中的 @ 符号,再次升级,升级成功

Bash

sed -i "s@CMCP_API_CFG_REDIS_HOSTNAME@$CMCP_API_CFG_REDIS_HOSTNAME@g" /sobey/www/cmcp-api/.env;

4、在 环境变量 CMCP_API_CFG_REDIS_PASSWORD 的值为 q5dHP@xCBUUJY^L ,进而导致升级失败,最终决定不修改原值,修改 SHELL 文件,将 @ 替换为 #,升级成功

Bash

sed -i "s@CMCP_API_CFG_REDIS_HOSTNAME@$CMCP_API_CFG_REDIS_HOSTNAME@g" /sobey/www/cmcp-api/.env;

Bash

sed -i "s#CMCP_API_CFG_REDIS_HOSTNAME#$CMCP_API_CFG_REDIS_HOSTNAME#g" /sobey/www/cmcp-api/.env;

5、总结,在 SHELL 中,数据的搜寻并替换,默认为:sed ‘s/要被取代的字串/新的字串/g’,但是其中 / 可以使用其他字符串替换,以避免冲突

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系