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

Содержимое удалено Содержимое добавлено
Строка 1124:
</source>
В этом примере демонстрируется, как строятся конструкции, чем то похожие на if-else, в Sed. Здесь команда <code>/1/b else</code> играет роль условия. Если в очередной строке есть цифра 1, то исполнение цикла перейдет на метку <code>:else</code>, благодаря команде <code>b</code>. За меткой <code>:else</code> исполняется команда <code>y</code>. Именно из-за перехода мы видим, что в первой строке (где есть цифра 1) изменилась только цифра, но не буква, так как мы перепрыгнули команду, которая изменила бы букву. В оставшихся строках нет цифры 1, поэтому перехода не происходит и на строку применяется две команды, первая из которых изменит букву, а вторая цифру.
 
Несмотря на всю простоту, даже в Sed можно случайно создавать бесконечные петли. Следующий код демонстрирует бесконечную петлю в Sed, из-за чего исполнение программы никогда не прервется:
<source lang="bash">
$ echo "looping" | sed ':begin ; b begin'
 
# Когда исполнение микропрограммы доходит до конца, команда b отправляет точку следования в начало и так до бесконечности.
</source>
Однако, некоторые команды способны самостоятельно разорвать такую петлю из-за особенностей их работы. Например, команды <code>n</code> и <code>N</code> завершают исполнение Sed, когда им нечего читать в потоке:
<source lang="bash">
$ seq 3 | sed ':begin ; n ; bbegin'
1
2
3
 
$ seq 3 | sed ':begin ; N ; bbegin'
1
2
3
 
# В обоих случаях конец потока когда-нибудь настанет, и команда n/N прервет исполнение петли.
</source>
 
== Ссылки ==