Sed-branches

提供:Dev Guides
移動先:案内検索

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

ブランチは、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 を定義します。 行に文字列「Paulo」が含まれ、 t コマンドが行の先頭に4つのハイフンが現れるまで手順を繰り返す場合、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