Sed-loops
提供:Dev Guides
ストリームエディター-ループ
他のプログラミング言語と同様に、SEDも実行の流れを制御するループおよび分岐機能を提供します。 この章では、SEDでループとブランチを使用する方法について詳しく説明します。
SEDのループは、 goto ステートメントと同様に機能します。 SEDは、ラベルでマークされた行にジャンプして、残りのコマンドの実行を続行できます。 SEDでは、次のように label を定義できます。
上記の例では、コロン(:)の後の名前はラベル名を意味します。
特定のラベルにジャンプするには、 b コマンドの後にラベル名を使用します。 ラベル名が省略されている場合、SEDはSEDファイルの最後にジャンプします。
ループと分岐を理解するための簡単なSEDスクリプトを作成しましょう。 books.txtファイルには、書籍のタイトルとその著者のいくつかのエントリがあります。 次の例では、本のタイトルとその著者名を1行にコンマで区切って組み合わせています。 次に、パターン「Paulo」を検索します。 パターンが一致する場合、行の前にハイフン(-)を印刷します。そうでない場合は、行を印刷する Print ラベルにジャンプします。
上記のコードを実行すると、次の結果が得られます。
一見すると、上記のスクリプトは不可解に見えるかもしれません。 これを分かりやすく説明しましょう。
- 最初の2つのコマンドは、わかりやすい h; n; H; x と s/\ n/、/ で、本のタイトルとその著者をコンマ(、)で区切って組み合わせています。
- 3番目のコマンドは、パターンが一致しない場合にのみラベル Print にジャンプします。そうでない場合、4番目のコマンドによって置換が実行されます。
- :Print *は単なるラベル名であり、すでにご存じのとおり、 *p は印刷コマンドです。
読みやすくするために、各SEDコマンドは別々の行に配置されています。 ただし、次のようにすべてのコマンドを1行に配置することもできます。
上記のコードを実行すると、次の結果が得られます。