sed替换包含'/'的整行匹配字符串,并用空格替换另一个字符串

时间:2019-10-15 15:07:14

标签: sed

我正在为这个问题而苦苦挣扎,并尝试了我看过的多个答案(Google / stackoverflow)。

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

请记住以下几点:

  1. “图像”前有一些我不想失去的前导空格。
  2. 我没有旧的图像标签名称,因此不能仅仅替换标签。

我的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"

我在这里尝试了多种方法,但没有一个或部分起作用: 这确实可以部分工作,但是由于某种原因,它只会将新TAG附加到旧TAG。不替换它。

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

1 个答案:

答案 0 :(得分:0)

傻,但是空间是问题所在:

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

感谢@Beta的评论。