sed替换包含'/';用空格替换另一个字符串
我正在努力解决这个问题,并尝试了我看过的多个答案(Google/stackoverflow) 使用bash脚本,我要替换: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
image:quay.io/repo/someimage:sometag
具有
image:quay.io/repo/someimage:newtag
牢记以下几点:
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”