Учебники

Редактор потока – Филиалы

Ветви могут быть созданы с помощью команды t. Команда t переходит на метку, только если предыдущая команда замены была успешной. Давайте возьмем тот же пример, что и в предыдущей главе, но вместо того, чтобы печатать один дефис (-), теперь мы печатаем четыре дефиса. В следующем примере показано использование команды t .

[jerry]$ sed -n ' 
h;n;H;x 
s/\n/, / 
:Loop 
/Paulo/s/^/-/ 
/----/!t Loop 
p' books.txt 

Когда приведенный выше код будет выполнен, он даст следующий результат.

 Буря мечей, Джордж Р. Р. Мартин 
 Две башни, Дж. Р. Р. Толкиен 
 ---- Алхимик, Пауло Коэльо 
 Братство Кольца, JRR Толкиен 
 ---- Паломничество, Пауло Коэльо 
 Игра престолов, Джордж Р. Р. Мартин

В приведенном выше примере первые две команды говорят сами за себя. Третья команда определяет метку Loop . Четвертая команда добавляет дефис (-), если строка содержит строку «Paulo», а команда t повторяет процедуру до тех пор, пока в начале строки не будет четыре дефиса.

Для улучшения читабельности каждая команда SED записана в отдельной строке. В противном случае мы можем написать однострочную SED следующим образом:

[jerry]$ sed -n 'h;n;H;x; s/\n/, /; :Loop;/Paulo/s/^/-/; /----/!t Loop; p' books.txt 

Когда приведенный выше код будет выполнен, он даст следующий результат.