sed заменяет всю строку, совпадающую со строкой, содержащей '/', и пробелы, заменяя ее другой строкой - PullRequest
0 голосов
/ 15 октября 2019

Я борюсь с этой проблемой и попробовал несколько ответов, на которые смотрел (Google / stackoverflow).

Используя скрипт bash, я хочу заменить: image: quay.io/repo/someimage:sometag на image: quay.io/repo/someimage:newtag

Имея в виду следующее:

  1. Перед «изображением» есть пробелы, которые я не хочу терять.
  2. У меня нет старого имени тега изображения, поэтому яне может просто заменить теги.

Мой сценарий оболочки выглядит примерно так:

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 голосов
/ 16 октября 2019

Глупо, но проблема была в пространстве:

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

Спасибо @Beta за комментарий.

...