ストリームエディタ-ブランチ
ブランチは、tコマンドを使用して作成できます。ザ・tコマンドは、前の置換コマンドが成功した場合にのみラベルにジャンプします。前の章と同じ例を取り上げますが、1つのハイフン(-)を出力する代わりに、4つのハイフンを出力します。次の例は、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
上記の例では、最初の2つのコマンドは自明です。3番目のコマンドはラベルを定義しますLoop。4番目のコマンドは、行に文字列「Paulo」が含まれている場合、ハイフン(-)を先頭に追加します。t コマンドは、行の先頭に4つのハイフンができるまで、この手順を繰り返します。
読みやすさを向上させるために、各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