sed替换包含'/';用空格替换另一个字符串

sed替换包含'/';用空格替换另一个字符串,sed,Sed,我正在努力解决这个问题,并尝试了我看过的多个答案(Google/stackoverflow) 使用bash脚本,我要替换: image:quay.io/repo/someimage:sometag 具有 image:quay.io/repo/someimage:newtag 牢记以下几点: 在“图像”之前有一些前导空格,我不想丢失它们 我没有旧的图像标记名称,因此我不能仅替换标记 我的shell脚本类似于: TEXT="image: quay.io/repo/someimage:" TEXT_N

我正在努力解决这个问题,并尝试了我看过的多个答案(Google/stackoverflow)

使用bash脚本,我要替换:
image:quay.io/repo/someimage:sometag
具有
image:quay.io/repo/someimage:newtag

牢记以下几点:

  • 在“图像”之前有一些前导空格,我不想丢失它们
  • 我没有旧的图像标记名称,因此我不能仅替换标记
  • 我的shell脚本类似于:

    TEXT="image: quay.io/repo/someimage:"
    TEXT_NEW="image: quay.io/repo/someimage:${TAG}"
    sed -i "s|$TEXT .*$|$TEXT_NEW|g" "docker-compose.yml"
    
    我在这里尝试了多种方法,但均无效或部分无效: 这确实部分起作用,但出于某种原因,它只是将新标记附加到旧标记上。并不能取代它

    sed -i -e "s|image: quay.io/repo/someimage:*| image: quay.io/repo/someimage:${TAG}|g" docker-compose.yml
    
    这会抛出一个错误。我猜是因为“/”的缘故

    sed -i "/image: quay.io/repo/someimage:/c image: quay.io/repo/someimage:${TAG}" docker-compose.yml
    

    愚蠢但空间是问题所在:

    sed -i -e "s|$TEXT.*|$TEXT_NEW|g" docker-compose.yml 
    

    感谢@Beta的评论。

    如果删除多余的空格,您的第一个示例就可以工作:
    sed-i“s”|$TEXT.*$|$TEXT|u NEW | g“docker compose.yml”