SED(1) — NEWS-OS Programmer’s Manual
名称
sed − ストリームエディタ
形式
sed [ −n ] [ −e script ] [ −f sfile ] [ file ] ...
解説
sed は、 指定の file (デフォルトは標準入力) を コマンドのスクリプトに従って編集し、 標準出力にコピーします。 −f オプションは、 ファイル sfile からスクリプトを取り込むように指定します。 このオプションは複数指定でき、それらは一つにまとめられます。 −f オプションがなく −e オプションを 1 つだけ指定した場合、 フラグ −e は省略することができます。 −n オプションはデフォルトの出力を抑制します。
スクリプトは次の形式の、 1 行に 1 個ずつのエディットコマンドから構成されます。
[address[,address]]function[arguments]
通常の操作では、 sed は入力行をパターンスペースへコピーし (ただし、 D コマンド後に残っている場合を除く)、 address がパターンスペースに当てはまるすべてのコマンドを順に適用し、 スクリプトの最後でパターンスペースを標準出力に出力し (−n が指定されている時を除く)、 そのパターンスペースを削除します。 以上のサイクルを繰り返します。
address は、 入力すべてのファイルを 通して先頭から順に数えた 10進数の行番号、 入力の最終行を指す $、 文脈アドレス (すなわち ed(1) のコマンド形式 /正規表現/ を修正したもの) で特定されたもの、 のいずれかです。 文脈アドレスの修正点は次の通りです。
エスケープシーケンス \n はパターンスペースにある改行と一致します。
アドレスの付かないコマンド行は、 すべてのパターンスペースを選択します。
1 つのアドレスが付いたコマンド行は、 そのアドレスとマッチする各々のパターンスペースを選択します。
2 つのアドレス付きコマンド行は、 第 1 のアドレスとマッチした最初のパターンスペースから、 第 2 のアドレスとマッチする次のパターンスペースまでの範囲 (そのアドレスも含む) を選択します (第 2 のアドレスが、 最初に選択された行番号より小さいか等しいと、 1 行のみが選択されます)。 その後、 処理が繰り返され、 再び第 1 のアドレスのサーチを行います。
エディットコマンドは、 否定機能 ! (後述)を 使って選択されなかったパターンスペースのみに適用させることができます。
以下の機能の説明では、 それぞれの機能で指定できる最大アドレスの個数を、 かっこ内に示します。
text で表される引数は、 1 つ以上の行から成ります。 複数の行を記述する場合は、 改行をエスケープするために、 最後を除くすべての行の行末に \ を付けなければなりません。 テキスト内のバックスラッシュは、 s コマンドの置き換え文字列内でのバックスラッシュと同様に扱われます。 そして、 どのスクリプトラインでも行われる先行するブランク、 タブの除去処理を防ぐのに使用されます。
rfile または wfile で示された引数は、 コマンド行の最後に指定し、 かつ必ずブランクを 1つ先行させなければなりません。 それぞれの wfile は処理が開始する前に生成されます。 最大 10個の異なる wfile 引数が許されます。
(1)a\
text 追加。 次の入力行を読み込む前に text を出力します。
(2)b label
label の付いた : コマンドに分岐します。 label が空であると、 コマンドスクリプトの最後まで分岐します。
(2)c\
text 変更。 パターンスペースを削除し、 該当アドレスの位置、 または 2 つのアドレス範囲の最後の位置に text を出力します。 次のサイクルを開始させます。
(2)d パターンスペースを削除します。 次のサイクルを開始させます。
(2)D パターンスペースの先頭から最初の改行までを削除します。 次のサイクルを開始させます。
(2)g パターンスペースの内容をホールドスペースの内容で置換します。
(2)G ホールドスペースの内容をパターンスペースの内容に追加します。
(2)h ホールドスペースの内容をパターンスペースの内容で置換します。
(2)H パターンスペースの内容をホールドスペースの内容に追加します。
(1)i\
text 挿入。 text を標準出力に出力します。
(2)l パターンスペースを適切な形にして標準出力に出力します。 印字可能でないキャラクタの場合は、2桁、または 3桁の 8進数で表示され、 長い行は改行されます。
(2)n パターンスペースを標準出力にコピーします。 パターンスペースを次の入力行で置換します。
(2)N 次の入力行を、 改行を埋め込んで、 パターンスペースに追加します。 (現在行が変わります)。
(2)p プリント。 パターンスペースを標準出力にコピーします。
(2)P パターンスペースの先頭から最初の改行まで標準出力にコピーします。
(1)q 終了。 スクリプトの最後まで分岐します。 新サイクルを開始させません。
(2)r rfile
rfile の内容を読み込みます。 それを、 次の入力を読み込む前に出力に送ります。
(2)s/regular expression/replacement/flags
パターンスペース内に現れる reguler expression (正規表現)を replacement (置き換え)文字列で置換します。 / の代わりに任意の文字が使えます。 詳しい説明については ed(1) を参照してください。 flags は、指定無しか、 または次のうちのいずれかです(組み合わせも可)。
n n = 1〜512。 n 番目の regulare expression だけを置換します。
g グローバル。 最初にみつかったものだけでなく、 重なり合わないすべての reguler expression を置換します。
p 置換されたとき、 パターンスペースを 出力します。
w wfile
書き込み。 置換されたとき、 パターンスペースを wfile に追加します。
(2)t label
テスト。 最新の入力行の読み込みまたは t コマンドの実行以降に置換が行われたとき、 スクリプト内で label の付いた : コマンドに分岐します。 label が無い場合、 スクリプトの最後まで分岐します。
(2)w wfile
書き込み。 パターンスペースを wfile に追加します。
(2)x パターンスペースとホールドスペースの内容を交換します。
(2)y/string1/string2/
変換。 出現した string1 内の文字をすべて string2 内の対応する文字で置き換えます。 string1 と string2 の長さは等しくなければなりません。
(2)! function
否定。 function (function が { のときはグループ)を アドレスで選択されない行だけに適用します。
(0): label
このコマンドは何もしません。 b または t コマンドの分岐先の label を付けるとき使用します。
(1)= 現在行の番号を 1 行、 標準出力に出力します。
(2){ パターンスペースが選定された時だけ、 対応する } までの指定されたコマンドを 実行します。
(0) 空のコマンドは無視されます。
関連事項
NEWS-OSRelease 4.2.1R