![sed 在文件中查找并替换](https://linux22.com/image/111141/sed%20%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%A5%E6%89%BE%E5%B9%B6%E6%9B%BF%E6%8D%A2.png)
我有一个 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