Это может работать для вас (GNU sed):
sed -n '/^Section/{:a;p;n;//q;ba}' file
Отключить неявную печать -n
и при сопоставлении строки, начинающейся Section
, печатать эту строку и следующие строки, пока другая строка не совпадет с той же pattern.
Все строки перед одним началом Section
будут игнорироваться, поскольку неявная печать отключена. Как только строка начинается с Section
, команды между {
и }
выполняются.
Сначала устанавливается заполнитель :a
. Затем текущее пространство шаблона печатается p
, следующая строка заменяет текущее пространство шаблона введением n
(он не печатает заменяемую строку, потому что -n
предотвращает это), и эта строка проверяется, чтобы увидеть, он совпадает с последним регулярным выражением //q
и, если он это делает, вся обработка прекращается (команда q
обеспечивает это). Если она не совпадает, команда ba
отправляет поток команд обратно заполнителю :a
. Таким образом, все строки от начала строки Section
до, но не включая начало следующей строки Section
, печатаются и затем не более обработка завершена.
Альтернативное решение, приведенное ниже, достигает того же результата, но без использования переключателя -n
, здесь команда d
удаляет все строки перед началом одного Section
, а команда Q
завершает работу. обработка без печати текущей строки (которая будет вторым вхождением начала строки Section
).
Альтернатива:
sed '/^Section/{:a;n;//Q;ba};d' file