SED
Section: User Commands (1)
索引
jman
BSD mandoc
索引
名称
sed
- ストリームエディタ
索引
書式
[-Ean
]
command
[file ...
]
[-Ean
]
[-e command
]
[-f command_file
]
[-i extension
]
[file ...
]
索引
解説
は、指定されたファイル、ファイルが指定されていないときは標準入力を読み込み、
指定されたコマンドリストに従って入力に変更を加え、変更結果を標準出力に書き
出します。
への第一引数として単一のコマンドを指定することができます。複数のコマンドを指定するときは、
-e
または
-f
オプションで行います。どちらの場合でも、入力に対して指定されたコマンドを、
指定された順序で実行します。
オプションは以下のとおりです。
- -E
-
正規表現を、Basic Regular expression (BRE) ではなく、
拡張 (モダン) 正規表現として解釈します。
re_format7
マニュアルページは、どちらの書式も完全に記述しています。
- -a
-
通常、
``w''
関数の引数となるファイルは、処理に先立って空のファイルとして作成されます。
-a
オプションを指定することにより、
``w''
関数が入力に対して適用されるときまで、
ファイルの作成が遅延されます。
- -e command
-
編集コマンド
command
をコマンドリストに追加します。
- -f command_file
-
ファイル
command_file
に記述されたコマンドをコマンドリストに追加します。
編集コマンドは 1 行ごとに記述します。
- -i extension
-
ファイルをその場で編集し、指定した
extension
のバックアップを保存します。
長さ 0 の
extension
が指定された場合、バックアップは保存されません。
その場で編集するときに、長さ 0 の
extension
を指定することは勧められません。
ディスク空間が尽きてしまったときなどに、
ファイルが壊れたり内容が一部だけになってしまうことがあるからです。
- -n
-
デフォルトでは、入力行は、すべてのコマンドを適用した後に標準出力に書
き出されます。
-n
オプションはこの動作を禁止し、明示的な出力コマンド
(
``p''
等)が適用された入力のみを出力します。
のコマンドは以下の形式です。
[address[,address]]function[arguments]
最初の address の前と function の前に空白を置くことができます。
通常
は、入力ファイルの各行を改行コードを含めずに
パターンスペース
にコピーし(
``D''
関数の後でパターンスペースになにか残っている場合を除きます)、
順にコピーされた内容に適応する address 指定を持つコマンドを
適用し、パターンスペースの内容を改行を付与して標準出力へ書き出し、
パターンスペースを消去するという動作を繰り返します。
いくつかの関数は、パターンスペースの一部または全部を保持できる
ホールドスペース
を利用します。ホールドスペースの内容は、以降の処理に用いることができ
ます。
索引
sed の address 表記
address の指定は必須ではありません。address は行番号 (複数の入力ファイ
ルに対しては通し番号を用います)、入力の最後の行を示すドル記号
(``$''
)
、コンテキストアドレス (区切り記号にはさまれた正規表現) のいずれかです。
address 指定を持たないコマンドは、すべてのパターンスペースを選択します。
1つの address 指定を持つコマンドは、その address 指定にマッチする
すべてのパターンスペースを選択します。
2 つの address 指定を持つコマンドは、address の両端を含んだ範囲を
選択します。
この範囲は、1 つめの address にマッチしたパターンスペースで始まり、
その後に続く 2 つめの address にマッチしたパターンスペースで終わります。
2 つめの address が、1 つめの address で選択された行番号以下の
番号である場合、1 つめの address が指定する行のみ選択されます。
2 つめの address がコンテキストアドレスである場合、
は、
1 つめの address にマッチしたパターンスペースを 2 つめの
address に再びマッチさせようとはしません。
は、選択された範囲の
次の行から、1 つめの address にマッチする行の検索を
再開します。
エクスクラメーション関数
(``!''
)
を用いることにより、address
で選択されていない範囲に編集コマンドを適用させることもできます。
索引
sed の正規表現
で使われる正規表現は、デフォルトでは Basic Regular expression (BRE
re_format7
を参照) ですが、
-E
フラグを指定すると、拡張 (モダン) 正規表現を使用可能です。
正規表現に加え、
では以下の拡張がなされています。
-
コンテキストアドレスにおいて、バックスラッシュ
(``\''
)
と改行以外の文字を正規表現の区
切りとして用いることできます。区切り文字の直前にバックスラッシュを置く
ことで、区切り文字をリテラルに解釈させることができます。たとえば、コンテキ
ストアドレス \xabc\xdefx において、区切り文字は
``x''
で、2つめの
``x''
は
``x''
という文字を表します。よって、正規表現は
``abcxdef''
と解釈されま
す。
-
エスケープシーケンス \n は、パターンスペースに埋め込まれた改行にマッチします。
しかし、address と置換コマンド中にリテラルな改行を含めること
はできません。
の正規表現には、デフォルト値の機能があります。
もし、正規表現が空、すなわち、区切りのみが指定されたなら、直前に用いられた正規表
現が用いられます。直前の正規表現とは、最後に使われた address または置換
コマンド中の正規表現です。最後とは実行時の順番であり、指定さ
れたコマンドの並びとは異なります。たとえば、
``/abc/s//XXX/''
はパターン
``abc''
を
``XXX''
で置換します。
索引
sed の関数
以下のコマンドの一覧では、指定可能な最大 address 数を、[0addr]、
[1addr]、[2addrs] と表記しています。これらは、それぞれ最大 0、1、2 個
の address を指定することができることを意味します。
text
引数のテキストは複数行に渡ることができます。改行の直前にバックスラッシュ
を置くことで、テキストに改行を含めることができます。その他のバックスラッ
シュは取り除かれ、直後の文字がリテラルに解釈されます。
``r''
と
``w''
関数は、オプショナルなファイル名引数をとります。ファイル名は、
関数名のあとに空白を置いてから指定する必要があります。引数として指定され
たファイルは、入力ファイルの処理を開始する前に作成(または、内容を消去)し
ます。
``b''
``r''
``s''
``t''
``w''
``y''
``!''
``:''
関数は、オプショナルな引数をとることが
できます。以下の一覧に、どの引数が関数名のあとに空白を置いてから指定し
なければならないかが記述してあります。
2つの関数は引数として関数リストをとります。関数リストは、以下の形式の
改行で区切られた
関数の羅列です。
{ function
function
...
function
}
``{''
の前後に空白を置くことができます。関数の前に空白を置くことができま
す。最後の
``}''
は、改行の直後に置く必要があります。
``}''
の直前に空白を置
くこともできます。
- [2addr] function-list
-
選択されたパターンスペースに関数リストを適用します。
- [1addr]a\
-
- text
-
次の入力行を読み込む直前に
text
を標準出力に書き出します。
これは
``N''
関数によって実行される場合でも新しい繰り返しの開始時であっても変わりません。
- [2addr]b[label]
-
指定された label を持つ
``:''
関数に分岐します。label が指定さ
れていない場合は、スクリプトの最後に分岐します。
- [2addr]c\
-
- text
-
パターンスペースを削除します。address が指定されていない場合と、1つだけ
指定された場合は
text
が標準出力に書き出されます。2つの address が
指定された場合は、選択された範囲の最終行を処理した後に、text が標準出力に書き出されま
す。
- [2addr]d
-
パターンスペースを削除し、次の繰り返しを開始します。
- [2addr]D
-
パターンスペースの最初の改行までの部分を削除し、次の繰り返しを開始します。
- [2addr]g
-
ホールドスペースの内容をパターンスペースにコピーします。
- [2addr]G
-
改行文字とホールドスペースの内容をパターンスペースに追加します。
- [2addr]h
-
パターンスペースの内容をホールドスペースにコピーします。
- [2addr]H
-
改行文字とパターンスペースの内容をホールドスペースに追加します。
- [1addr]i\
-
- text
-
標準出力に
text
を書き出します。
- [2addr]l
-
パターンスペースの内容を読めるような以下の形式で出力します。
- backslash
-
\\
- alert
-
\a
- form-feed
-
\f
- carriage-return
-
\r
- tab
-
\t
- vertical tab
-
\v
印字不可能な文字は、各バイトごとに
``\''
に続いて 3 桁の 8 進数で出力されま
す (Most Significant Byte が先頭です)。
長い行は折り返して表示されます。折り返した部分は
``\''
に続く改行で
示されます。各行の最後には
``$''
が出力されます。
- [2addr]n
-
もし、(
-n
オプションによって)デフォルトの出力が停止されていないなら、
パターンスペースの内容を標準出力に書き出します。
また、パターンスペースを次の入力行
で置き換えます。
- [2addr]N
-
パターンスペースに、次の入力行を追加します。このとき、元の内容との
間に改行を埋め込みます。現在の行番号が変化することに注意してください。
- [2addr]p
-
パターンスペースの内容を標準出力に書き出します。
- [2addr]P
-
パターンスペースの最初の改行までの内容を標準出力に書き出します。
- [1addr]q
-
スクリプトの残りをスキップし、次の繰り返しを開始せずに終了します。
- [1addr]r file
-
次の入力行を読み込む直前に、ファイル
file
の内容を標準出力に書き出します。
file
が何らかの理由で読み込むことができないなら、
それはだまって無視され、エラー条件は設定されません。
- [2addr]s/regular expression/replacement/flags
-
パターンスペース内で、 regular expression に対応する最初の部分を replacement で
置換します。バックスラッシュと改行以外の文字をスラッシュのかわりに用
いることができます。regular expression と replacement の中に、リテラルな区切り文
字を置きたいときは、
``\''
に続けて区切り文字を置きます。
replacement 中のアンパサンド
(``&''
)
は、regular expression にマッチした文
字列に置換されます。
``&''
の前に
``\''
を置くことで、この特殊な
``&''
の解釈を禁止
することができます。
``\#''
(
``#''
は数字)は、regular expression の
後方参照(back reference)表現にマッチするテキストに置換されます(
re_format7
参照)。
replacement に改行を含めることで、入力行を分割することができます。
改行の直前に
``\''
を置くことで、replacement 中に改行を含めることができ
ます。
s 関数の
flags
には、以下のものを0個以上指定できます。
- N
-
パターンスペースで
N
回目にマッチした regular expression のみを置換します。
- g
-
先頭だけではなく、重なりあわない全てのマッチした内容を
replacementで置換します。
- p
-
置換が行われたら、パターンスペースの内容を標準出力に書き出します。
もし、置換後の内容が置換前のものと同一でも置換が行われたとみなします。
- w file
-
もし置換が行われたなら、パターンスペースの内容をファイル
file
に追加します。
もし、置換後の内容が置換前のものと同一でも置換が行われたとみなします。
- [2addr]t [label]
-
入力行が読み込まれてから、あるいは
``t''
関数が実行されてから、置換が
行われていれば、指定した label を持つ
``:''
コマンドへ分岐します。label が指
定されていない場合は、スクリプトの最後に分岐します。
- [2addr]w file
-
パターンスペースの内容をファイル
file
に追加します。
- [2addr]x
-
パターンスペースとホールドスペースの内容を交換します。
- [2addr]y/string1/string2/
-
string1
に現れるパターンスペース中の文字を
string2
の対応した
文字に置換します。たとえば、`y/abc/ABC/' はパターンスペース中の文字
a、b、c を大文字に置換します。
`\' と改行以外のすべての文字を区切りとし
て用いることができます。
string1
、
string2
中では、`\' 直後に改行以外の文字が続く場合はリテラルに解釈され、
`\n' は改行と解釈されます。
- [2addr]!function
-
- [2addr]!function-list
-
関数または関数リストを、 address で選択されていない行に適用します。
- [0addr]:label
-
この関数は何も行いません。
``b''
、
``t''
で用いるラベルを生成します。
- [1addr]=
-
行番号と改行を標準出力に書き出します。
- [0addr]
-
空行は無視されます。
- [0addr]#
-
``#''
とそれ以降の文字は無視されます(コメントとして扱われます)。
ただし、ファイルの行頭の 2
文字が
``#n''
の場合、デフォルトの出力が禁止されます。
これは、コマンドラインに
-n
オプションを指定した場合と等価です。
索引
環境変数
COLUMNS , LANG , LC_ALL , LC_CTYPE , LC_COLLATE
の環境変数が、
environ(7)
の記述通りに、
の実行に影響します。
索引
診断
Ex -std
索引
関連項目
awk(1),
ed(1),
grep(1),
regex(3),
re_format7
索引
規格
ユーティリティは
St -p1003.2
のスーパセットとなっているはずです。
-E , a
-i
オプションは非標準の
Fx 拡張であり、他のオペレーティングシステムでは使用できないかもしれません。
索引
歴史
An L. E. McMahon
が記述した
コマンドは
AT&T System
v7
で登場しました。
索引
作者
An Diomidis D. Spinellis Aq dds@FreeBSD.org
索引
バグ
値 0x5C
( ASCII
`\'
)
のバイトを含むマルチバイト文字は、
``a''
``c''
``i''
コマンドへの引数では、誤って行継続文字として扱われてしまうかもしれません。
マルチバイト文字は、
``s''
と
``y''
コマンドでの区切り文字として使用できません。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- sed の address 表記
-
- sed の正規表現
-
- sed の関数
-
- 環境変数
-
- 診断
-
- 関連項目
-
- 規格
-
- 歴史
-
- 作者
-
- バグ
-
Time: 07:06:17 GMT, January 12, 2009