如何使用Shell脚本中的sed替换txt文件中某行中特定字符串之后的字符串?

时间:2019-07-11 14:55:46

标签: bash sed sh

我有一个文本文件,名为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(或者它可能还包含其他字符串),同时保持文件的其余部分不变。 如何使用诸如sed之类的内置linux工具来做到这一点?

将字符串包含版本替换为'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

1 个答案:

答案 0 :(得分:1)

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

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

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

您也可以使用变量:

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