Sed: руководство: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 1145:
# В обоих случаях конец потока когда-нибудь настанет, и команда n/N прервет исполнение петли.
</source>
 
На практике петли могут использоваться для накапливания информации в буфере ''pattern space''. В официальной документации к GNU Sed приводится пример использования показанной выше петли, в котором она используется для объединения строк. Пусть у нас есть такой текст, использующий QP кодирование.
<source lang="">
All the wor=
ld's a stag=
e,
And all the=
men and wo=
men merely =
players:
They have t=
heir exits =
and their e=
ntrances;
And one man=
in his tim=
e plays man=
y parts.
</source>
Не вдаваясь в подробности этого кодирования, лишь отметим, что каждая строка завершается символом <code>=</code>, который говорит, что продолжение перенесено. Нашей задачей является восстановить оригинальный текст через слияние фрагментов по завершающему символу <code>=</code>. В документации приводится такое решение:
<source lang="bash">
$ sed ':x ; /=$/ { N ; s/=\n//g ; bx }' text.txt
All the world's a stage,
And all the men and women merely players:
They have their exits and their entrances;
And one man in his time plays many parts.
</source>
В этом решении петля разрывается, когда <code>N</code> нечего читать, но до разрыва мы успеваем накопить в буфере все строки, оканчивающиеся на <code>=</code> с одновременным удалением пары символов <code>=\n</code>. Печать окончательного результата происходит за счет автоматической печати.
 
== Ссылки ==