sed 在文件中查找并替换

sed 在文件中查找并替换

我有一个 json 文件,其中一行如下,

"image": "docker.abc.com/abc-pr0000abc:ABCCoreUI-46",

有人可以帮助我使用 sed 命令来替换上面的命令吗,如下所示,

"image": "docker.abc.com/abc-pr0000abc:ABCCoreUI-47",

另外我想要通配符 46,比如 ABCCoreUI-*

我试过sed s/ABCCoreUI-4*/ABCCoreUI-47/ file.json

输出变成,

"image": "docker.abc.com/abc-pr0000abc:ABCCoreUI-4742",

谢谢

答案1

另外我想要通配符 46,比如 ABCCoreUI-*

我认为没有人回答您的问题“修复您的模式以匹配字符串末尾的任何数字,可能是由于*最后位置的字符行为,输出是连接 47+42”

您可以将正则表达式包装起来''以防止壳牌球体

然后,匹配零个或多个数字

sed -r 's/ABCCoreUI-[0-9]*/ABCCoreUI-47/' file.json
sed -r 's/ABCCoreUI-[[:digit:]]*/ABCCoreUI-47/' file.json

匹配零个或多个字符

sed -r 's/ABCCoreUI-.*/ABCCoreUI-47/' file.json
  • -r是启用扩展sed正则表达式
  • [0-9][[:digit:]](POSIX) 匹配数字
  • [0-9]*[[:digit:]]*匹配零个或多个数字
  • .*匹配零个或多个字符

请注意,这\d不起作用。

答案2

这种快速而肮脏的方法sed似乎可以达到目的:

sed '/image.*docker\.xxx\.com.*CoreUI-46/s/CoreUI-46/CoreUI-47/' /path/to/yourfile.json

答案3

在最简单的情况下,您可以应用以下内容sed方法:

sed 's/\("image": "[^"]*-\)46"/\147"/g' jsonfile

答案4

下面为我​​工作

sed "s|\(^.*\"image\": \"docker.abc.com/abc-pr0000abc:\).*|\ABCCoreUI-47\",|g" -i artifactorytest.json

相关内容