bash - 如何使用 shell 脚本中的 sed 替换 txt 文件中某行中特定字符串之后的字符串?
问题描述
我有一个文本文件说 file.txt 包含以下数据:
APP_ARTIFACT=xxxx
APP_DOMAIN=xxx
APP_NAME=xxx
APP_OWNER_EMAIL=xxx
APP_PATH=xxx
IMAGE=dockerhub.ccc.xx.net:5005/aaa/xxx-rhel7:2.4
NAMESPACE=xxx
PAAS=xxxnce1
现在,我想在 .sh 中编写一个脚本,它可以将 'IMAGE=dockerhub.ccc.xx.net:5005/aaa/xxx-rhel7:' 之后的版本替换为不同的版本。
这意味着我想用其他字符串替换 2.4(或者它也可能包含其他字符串),同时保持文件的其余部分不变。如何使用一些内置的 linux 工具(如“sed”)来做到这一点?
用 'mystring; 替换包含版本的字符串后,替换后的预期输出应该是:
APP_ARTIFACT=xxxx
APP_DOMAIN=xxx
APP_NAME=xxx
APP_OWNER_EMAIL=xxx
APP_PATH=xxx
IMAGE=dockerhub.ccc.xx.net:5005/aaa/xxx-rhel7:mystring
NAMESPACE=xxx
PAAS=xxxnce1
解决方案
假设您希望新版本为 555,您可以执行以下操作:
sed -re 's/(^IMAGE.*):(.*)/\1:555/'
以上匹配以 IMAGE 开头的行并查看其后的所有内容。它确保您有一个冒号 (:) 并使用第一个匹配项 (\1) 并为您的新版本附加一个冒号 555 (:555)。
您也可以使用变量:
myver="555"
sed -re "s/(^IMAGE.*):(.*)/\1:$myver/"
推荐阅读
- asp.net-core - 在 VS2019 上调试 docker-compose 时出错
- c# - DirectoryInfo.EnumerateDirectories() 在管理员模式下运行时不起作用
- sql-server - 如何在 SQL Server 2014 中呈现分层数据
- javascript - 根据屏幕大小动态更改表格行Vuejs
- python - 如果它们是零,则仅删除第一个条目
- spring-boot - Springboot 通过 application.properties 禁用 Apache Jserv 协议(AJP)
- node.js - 错误 [ERR_UNHANDLED_ERROR]:未处理的错误。(“不正确的论点”)
- python - Django:新值已添加到 mysql 表中,但在服务器重新启动之前未显示在 html 模板中
- javascript - 带有已保存复选框状态的事件冒泡
- java - 三星 10 plus 不允许 wifi p2p 发现