ストリームエディタ-ブランチ

ブランチは、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