Редактор потока - Ветви

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

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

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
----The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
----The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

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

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

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

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

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
----The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
----The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin