TL; DR:
sed '/# <docker-registry>/,/# <\/docker-registry>/d' $FILE > "$FILE.tmp"
mv "$FILE.tmp" $FILE
ОБЪЯСНЕНИЕ:
Я нашел ответ, когда отправлял вопрос, поэтому для потомков :
- Чтобы удалить строки из вывода sed, добавьте флаг
d
в конце выражения:
sed -n 's|# <docker-registry>|,|# </docker-registry>|d' $FILE
sed создает потоки. Чтобы перезаписать файл, передайте результат в файл:
sed -n 's|# <docker-registry>|,|# </docker-registry>|d' $FILE > $FILE
Ошибки
sed: 1: "s|# <docker-registry>|, ...": bad flag in substitute command: '#'
можно избежать, используя разделитель по умолчанию и экранируя / в конце шаблона:
sed '/# <docker-registry>/,/# <\/docker-registry>/d' $FILE > $FILE
По какой-то причине приведенная выше команда в (3) стирает исходный файл и не передает туда новое содержимое. Печать в новый файл с последующим перемещением его поверх старого дает результат:
sed '/# <docker-registry>/,/# <\/docker-registry>/d' $FILE > "$FILE.tmp"
mv "$FILE.tmp" $FILE
Не стесняйтесь редактировать, если у вас есть более элегантный ответ:)