ストリームエディタ-ワークフロー
この章では、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)を押します。