ストリーム・エディター。
sed [ -n ] Script [ File ... ]
sed [ -n ] [ -e Script ] ... [ -f ScriptFile ] ... [ File ... ]
sed コマンドは、指定された File パラメーターの行を編集スクリプトに従って変更し、それらを標準出力に書き出します。 sed コマンドには、変更する行を選択するための機能、および選択した行に対してのみ変更を行うための機能などが多数含まれています。
sed コマンドは変更中の行を保持するために、 パターン・スペースとホールド・スペースの 2 つのワークスペースを使用します。パターン・スペースには選択した行を保持し、ホールド・スペースには行を一時的に保管します。
編集スクリプトは個々のサブコマンドから構成されていて、サブコマンドは 1 行に 1 つずつです。 sed サブコマンドの一般的なフォーマットは以下のとおりです。
[address-range] function[modifiers]
sed コマンドは、入力行をパターン・スペースに読み込み、 アドレスがその行を選択する手順内のすべての sed サブコマンドを適用し、パターン・スペースを標準出力に書き出すことによって、各入力 File パラメーターを処理します。次に、パターン・スペースをクリアし、入力 File パラメーターで指定された行ごとに、 このプロセスを繰り返します。 sed サブコマンドによっては、ホールド・スペースを使用して、パターン・スペースの全体または一部をあとで取り出すために保管するものもあります。
コマンドにアドレス (行番号または検索パターン) が含まれている場合は、コマンドの影響を受けるのは、 そのアドレス行 (複数の場合もある) だけです。コマンドにアドレスが含まれていない場合は、コマンドはすべての行に適用されます。
アドレスは 10 進数の行番号か、入力の最後の行をアドレッシングする $ (ドル記号) またはコンテキスト・アドレスです。コンテキスト・アドレスは正規表現で、ed コマンドで使用されるものに似ていますが、 以下の点が異なっています。
\?pattern?
上記の式の ? (疑問符) は、ユーザーが選択する区切り文字です。現行ロケールから、スペースまたは改行文字を除く任意の文字を選択できます。 \ (バックスラッシュ) 文字は、? (疑問符) が最初のオカレンスにのみ必要です。
パターンのデフォルトの形式は以下のとおりです。
/pattern/
\ (バックスラッシュ) は必要ありません。
一部のコマンドは、そのコマンドを適用する 1 行または行の範囲を指定できます。このようなコマンドを、アドレッシング ・コマンドと呼びます。アドレッシング・コマンドには、以下の規則が適用されます。
sed サブコマンドには、以下の sed スクリプト・サブコマンドがあります。サブコマンドの前に付いている括弧内の数は、そのサブコマンドに使用可能な最大アドレス数を示しています。
このコマンドは、以下の終了値を戻します。
| 0 | 正常終了。 |
| >0 | エラーが発生しました。 |
sed "s/happy/enchanted/g" chap1
このコマンド・シーケンスによって、ファイル chap1 内で見付かったワード happy の各オカレンスが、ワード enchanted に置き換えられます。 s サブコマンドの終わりにある文字 g は、sed コマンドに対して、各行のすべてのオカレンスを置き換わるように指示します。 g がなければ、sed コマンドは行内のワード happy の最初のオカレンスだけを置き換えます。
sed コマンドはフィルターとして機能します。標準入力あるいはコマンド行で指定されたファイル (この例では chap1) からテキストを読み取り、そのテキストを変更し、結果を標準出力に書き出します。 sed ストリーム・エディターは大半のエディターとは異なり、元のファイルは置き換えません。 この特性により、sed コマンドはパイプラインで使用すると強力なコマンドです。
pr chap2 | sed "s/Page *[0-9]*$/(&)/" | enq
このコマンド・シーケンスによって、ファイル chap2 を出力する前に、ページ番号が括弧で囲まれます。 pr コマンドが各ページの先頭に見出しとページ番号を付けると、sed コマンドがページ番号を括弧で囲み、enq コマンドが編集後のリストを出力します。
sed コマンド・パターン /Page *[0-9]*$/ は、行の終わりに表示されるページ番号と一致します。 s サブコマンドは、これを (&) に変更します。この & は、一致したページ番号を表します。
sed -n "/food/p" chap3
sed -n によって、chap3 ファイル内で food というワードが入っている行がすべて表示されます。通常、sed コマンドは編集後にすべての行を標準出力にコピーします。 -n フラグを指定すると、sed はコピーを行いません。 この場合は、p などのサブコマンドを使用して、指定されたテキストの一部を書き出します。 -n フラグを指定しなければ、この例は chap3 のすべての行を表示し、food を含んでいる個々の行を 2 回表示します。
sed -f script.sed chap4
何か複雑な操作を行う場合には、このコマンド・シーケンスを使用して sed スクリプト・ファイルを作成します。こうすると、このスクリプトを使用前に検査して変更できます。また、このスクリプトを再使用して、他のファイルを編集することもできます。対話型テキスト・エディターを使用して、スクリプト・ファイルを作成してください。
:join
/\\$/{N
s/\\\n//
b join
}この sed スクリプトは、\ (バックスラッシュ) で終わる個々の行を、\ のあとに続く行と結合します。最初に、パターン /\\$/ は、 {} (中括弧) で囲まれているコマンドのグループに対して \ で終わる行を選択します。次に、N サブコマンドは次の行を追加して、改行文字を埋め込みます。 s/\\\n// は、 \ と埋め込まれた改行文字を削除します。最後に、b join は分岐をラベル :join に戻し、新しく結合された行の終わりにある \ を検査します。分岐がない場合は、sed コマンドは結合された行を書き込んで、 もう 1 つの \ を検査する前に次の行を読み取ります。
cat oldfile | sed -e "s/testpattern/$REPL/g" | tee newfile
$ sed -f command.file input.fileここで、command.file はスクリプト・ファイル、input.file ファイルは入力ファイルです。
$cat command.file y/ABC\n/abcZ/代替方法として、次のコマンドを実行しても同じ機能になります。
sed "y/ABC\n/abcZ/" input.file