Sed-workflow

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

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

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

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

  • 読み取り:SEDは入力ストリーム(ファイル、パイプ、またはstdin)から行を読み取り、 pattern buffer と呼ばれる内部バッファーに格納します。
  • 実行:すべてのSEDコマンドがパターンバッファーに順番に適用されます。 デフォルトでは、行アドレス指定が指定されていない限り、SEDコマンドはすべての行に(グローバルに)適用されます。
  • 表示:(変更された)コンテンツを出力ストリームに送信します。 データを送信した後、パターンバッファは空になります。
  • 上記のプロセスは、ファイルが使い果たされるまで繰り返されます。

注意点

  • パターンバッファは、SEDが使用するプライベートなメモリ内の揮発性ストレージエリアです。
  • デフォルトでは、すべてのSEDコマンドがパターンバッファーに適用されるため、入力ファイルは変更されません。 GNU SEDは、入力ファイルをその場で変更する方法を提供します。 これについては後のセクションで検討します。
  • hold buffer と呼ばれる別のメモリ領域があり、これもプライベートなメモリ内の揮発性ストレージ領域です。 後で取得するために、データをホールドバッファに保存できます。 各サイクルの終わりに、SEDはパターンバッファーの内容を削除しますが、ホールドバッファーの内容はSEDサイクルの間持続します。 ただし、SEDコマンドはホールドバッファで直接実行できないため、SEDではホールドバッファとパターンバッファ間でデータを移動できます。
  • 最初は、パターンバッファとホールドバッファの両方が空です。
  • 入力ファイルが提供されない場合、SEDは標準入力ストリーム(stdin)からの入力を受け入れます。
  • デフォルトでアドレス範囲が提供されない場合、SEDは各行で動作します。

テキストファイル quote.txt を作成して、有名な著者Paulo Coelhoの引用を含めましょう。

[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)を押します。