ストリームエディタ-ワークフロー

この章では、SEDが正確にどのように機能するかを探ります。SEDのエキスパートユーザーになるには、その内部を知る必要があります。SEDは、読み取り、実行、表示という単純なワークフローに従います。次の図は、ワークフローを示しています。

  • Read:SEDは、入力ストリーム(ファイル、パイプ、またはstdin)から行を読み取り、それをと呼ばれる内部バッファーに格納します。 pattern buffer

  • Execute:すべてのSEDコマンドはパターンバッファに順番に適用されます。デフォルトでは、行アドレス指定が指定されていない限り、SEDコマンドはすべての行に(グローバルに)適用されます。

  • Display:(変更された)コンテンツを出力ストリームに送信します。データを送信した後、パターンバッファは空になります。

  • 上記のプロセスは、ファイルが使い果たされるまで繰り返されます。

注意点

  • パターンバッファは、SEDが使用するプライベートなメモリ内の揮発性ストレージ領域です。

  • デフォルトでは、すべてのSEDコマンドがパターンバッファーに適用されるため、入力ファイルは変更されません。GNU SEDは、入力ファイルをその場で変更する方法を提供します。これについては、後のセクションで説明します。

  • と呼ばれる別のメモリ領域があります hold bufferこれもプライベートなメモリ内の揮発性ストレージ領域です。データは、後で取得するためにホールドバッファに保存できます。各サイクルの終わりに、SEDはパターンバッファの内容を削除しますが、ホールドバッファの内容はSEDサイクル間で永続的なままです。ただし、SEDコマンドはホールドバッファで直接実行できないため、SEDではホールドバッファとパターンバッファ間のデータ移動が可能です。

  • 最初は、パターンバッファとホールドバッファの両方が空です。

  • 入力ファイルが提供されていない場合、SEDは標準入力ストリーム(stdin)からの入力を受け入れます。

  • デフォルトでアドレス範囲が指定されていない場合、SEDは各行で動作します。

テキストファイルを作成しましょう quote.txt 有名な作家パウロコエーリョの引用が含まれています。

[jerry]$ vi quote.txt 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

SEDのワークフローを理解するために、SEDを使用してquote.txtファイルの内容を表示してみましょう。この例では、cat コマンド。

[jerry]$ sed '' quote.txt

上記のコードを実行すると、次のような結果になります。

There is only one thing that makes a dream impossible to achieve: the fear of failure.

上記の例では、quote.txtが入力ファイル名であり、その前にSEDコマンドを意味する一重引用符のペアがあります。この操作をわかりやすく説明しましょう。

最初に、SEDは入力ファイルquote.txtから行を読み取り、それをパターンバッファーに格納します。次に、パターンバッファにSEDコマンドを適用します。この場合、SEDコマンドは存在しないため、パターンバッファに対して操作は実行されません。最後に、パターンバッファの内容を削除して、標準出力に出力します。簡単じゃないですか。

次の例では、SEDは標準入力ストリームからの入力を受け入れます。

[jerry]$ sed '' 
       
      

上記のコードを実行すると、次のような結果になります。

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure.

ここで、最初の行はキーボードから入力され、2番目の行はSEDによって生成された出力です。SEDセッションを終了するには、ctrl-D(^ D)を押します。