Вы используете не тот инструмент.sed для s / old / new, вот и все.Просто используйте awk:
$ awk '/^[^[:blank:]]/{f=/^Four$/} f' file
Four
five
six
Как это работает: Каждый раз, когда он находит строку, которая не начинается с пробелов (/^[^[:blank:]]/
), он устанавливает флаг f
(для «найден») в 1если эта строка начинается с Four
и 0 в противном случае (f=/^Four$/
).Всякий раз, когда f
отличен от нуля, это интерпретируется как истинное условие и, таким образом, вызывает поведение awks по умолчанию, которое заключается в печати текущей строки.Поэтому, когда он попадает в блок, начинающийся с Four, он печатает каждую строку в этом блоке, потому что f
равен 1 / true, а для всех остальных блоков он не печатается, поскольку f
равен 0 / false.