我有一个文本文件,名为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
答案 0 :(得分:1)
假设您希望新版本为555,则可以执行以下操作:
sed -re 's/(^IMAGE.*):(.*)/\1:555/'
上面的内容与以IMAGE开头的行匹配,并查看其后的所有内容。这样可以确保您有一个冒号(:),并使用第一个匹配项(\ 1),并为新版本附加一个冒号555(:555)。
您也可以使用变量:
myver="555"
sed -re "s/(^IMAGE.*):(.*)/\1:$myver/"