Здесь уже есть несколько других хороших ответов, демонстрирующих, как проверить вашу строку между - START -
и --END -
блоков, но, учитывая ваш пример ввода, может оказаться, что вам вообще не нужно беспокоиться о - START -
.
sed -n '$!N;/^Device=A\n/,/\n--END--/P;D'
... будет печатать все, начиная с Device = A
и заканчивая последней \ n
ewline, встречающейся непосредственно перед следующей встречающейся - END -
в каждый блок. Он не беспокоится о - START -
, потому что, похоже, нет необходимости когда-либо проверять его.
Итак, для такого блока:
--START--
Device=A
...stuff...
--END--
... вывод будет ...
Device=A
...stuff...
... но для такого блока, как ...
--START--
Device=B
Device=A
...stuff...
--END--
... он будет выводить то же самое.
Он работает, добавляя строку ввода N
ext к каждой строке, которая равна !
не последний $
, поэтому пространство шаблонов выглядит так:
^line1\nline2$
Для каждого пространства шаблонов, которое встречается между последовательностями ^ Device = A \ n
и \ n - КОНЕЦ -
первая из двух строк, находящихся в настоящее время в шаблоне, P
ритирована, а затем D
выбрана перед началом следующего цикла с тем, что осталось. Итак, следующее пространство шаблонов выглядит так ...
^line2\nline3$