Вот как выглядит этот скрипт, когда он запускается через отладчик sedsed
(от Aurelio Jargas):
$ echo -e 'a\nb\nc\nd' | sed '$!N;$!D' PATT:^a$
PATT:^a$
COMM:$ !N
PATT:^a\Nb$
COMM:$ !D
PATT:^b$
COMM:$ !N
PATT:^b\Nc$
COMM:$ !D
PATT:^c$
COMM:$ !N
PATT:^c\Nd$
COMM:$ !D
PATT:^c\Nd$
c
d
Я отфильтровал строки, которые показались бы вернымипробел ("HOLD"), так как он не используется.«PATT» показывает, что находится в пространстве шаблона, а «COMM» вводит команду, которая должна быть выполнена.«\ N» указывает на встроенную новую строку.Конечно, «^» и «$» указывают начало и конец строки.
!N
добавляет следующую строку, а !D
удаляет предыдущую строку и переходит в начало сценария, не делаянеявная печать.Когда читается последняя строка, тесты $!
не выполняются, поэтому ничего не остается сделать, и скрипт завершает работу и выполняет неявную печать того, что остается в пространстве шаблона (поскольку -n
не было указано в аргументах).
Отказ от ответственности: я участвую в проекте sedsed
и внес несколько незначительных улучшений, включая расширенную поддержку цвета, добавив индикатор начала строки ^
и предварительную поддержку Python 3. Версия передового края (котораяв последнее время не тронут) здесь .