首页 > 解决方案 > 如何使用 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

标签: bashsedsh

解决方案


假设您希望新版本为 555,您可以执行以下操作:

sed -re 's/(^IMAGE.*):(.*)/\1:555/'

以上匹配以 IMAGE 开头的行并查看其后的所有内容。它确保您有一个冒号 (:) 并使用第一个匹配项 (\1) 并为您的新版本附加一个冒号 555 (:555)。

您也可以使用变量:

myver="555"
sed -re "s/(^IMAGE.*):(.*)/\1:$myver/"

推荐阅读