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