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

Содержимое удалено Содержимое добавлено
Строка 1173:
</source>
В этом решении петля разрывается, когда <code>N</code> нечего читать, но до разрыва мы успеваем накопить в буфере все строки, оканчивающиеся на <code>=</code> с одновременным удалением пары символов <code>=\n</code>. Печать окончательного результата происходит за счет автоматической печати.
 
К решению этой задачи есть еще один подход, основанный на условном переходе:
<source lang="bash">
$ sed ':x ; $!N ; s/=\n// ; tx ; P ; D' 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>t</code>: команда <code>$!N</code> накапливает данные в буфере, а <code>s/=\n//</code> удаляет пару <code>=\n</code>; когда замена удается, мы переходим в начало программы (т.е. еще есть что накапливать), иначе продолжения нет и мы идем дальше. Командой <code>P</code> мы выводим накопленный результат, а командой <code>D</code> мы начинаем новый цикл, если в потоке есть еще данные.
 
== Ссылки ==