sed(1) テキストのフィルタリング、変換用のストリームエディタ

書式

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

説明

sed はストリームエディタである。ストリームエディタは、入力ストリーム (ファイルまたはパイプラインからの入力) に対して基本的なテキスト変換を行うために用いられる。sed は 編集スクリプトを使える (ed のような) エディタと いろいろな面で似ているが、sed は入力に対して 1 パスだけで動作するので、より効率的である。また sed はパイプラインのテキストに対してフィルタ動作を行うことができ、この点は他のタイプのエディタとはっきり違う。
-n, --quiet, --silent
パターンスペースの自動出力を抑制する
-e script, --expression=script
実行するコマンドとして script を追加する
-f script-file, --file=script-file
実行するコマンドとして script-file の内容を追加する
--follow-symlinks
インプレース処理においてシンボリックリンクを辿る
-i[SUFFIX], --in-place[=SUFFIX]
ファイルをインプレース処理で編集する (SUFFIX 指定時はバックアップを取る)
-l N, --line-length=N
`l' コマンドの出力行を折り返す長さを指定する
--posix
全ての GNU 拡張を無効にする
-r, --regexp-extended
スクリプトで拡張正規表現を使用する
-s, --separate
複数の入力ファイルを一続きのストリームとして扱わずに個別のファイルとして扱う
-u, --unbuffered
入力ファイルからデータをごく少量ずつ取り込み、頻繁に出力バッファを掃き出す (flush)
-z, --null-data
NUL 文字で行を分割する
--help
ヘルプを表示して終了する
--version
バージョン情報を出力して終了する

-e--expression-f、または --file オプションのいずれも指定されない場合、最初のオプションでない引き数が sed スクリプトとして解釈される。残りの全ての引き数は入力ファイル名として扱われる。入力ファイルが指定されない場合は、標準入力から読み込む。

GNU sed ホームページ: <http://www.gnu.org/software/sed/>. GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>. 電子メールによるバグレポートの宛先: <[email protected]>. 「Subject: 」フィールドのどこかに「sed」を記載してください。

コマンドの文法

これは sed コマンドのごく簡単な概要であり、既に sed を知っている人向けの備忘録程度のものである。より詳細な情報については、他の文書 (texinfo 文書など) を参照すること。

アドレスを取らないコマンド

label
b コマンドと t コマンド用のラベル。
#comment
次の改行文字まで (あるいは -e スクリプトフラグメントの末尾まで) をコメントとして取り扱う。
}
{ } ブロックの閉じ括弧。

アドレスを 0 または 1 個取るコマンド

=
現在の行番号を出力する。
a \
text
text を追加する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。
i \
text
text を挿入する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。
q [exit-code]
これ以上入力を処理せず、ただちに sed スクリプトの処理を終了する。ただし自動出力が抑制されていない場合、現在のパターンスペースが出力される。引き数 exit-code は GNU 拡張である。
Q [exit-code]
これ以上入力を処理せず、ただちに sed スクリプトの処理を終了する。引き数 exit-code は GNU 拡張である。
filename
filename から読み込んだテキストを追加する。
filename
filename から 1 行読み込み、追加する。コマンドを起動するたびにファイルから次の 1 行を読み込む。このコマンドは GNU 拡張である。

アドレス範囲を指定できるコマンド

{
コマンドブロックを開始する (} で終了する)。
label
label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。
c \
text
選択した行を text で置換する。text に改行を含めたい場合は、その前にバックスラッシュを置く。
d
パターンスペースを削除する。次のサイクルを開始する。
D
パターンスペースに改行がない場合は、d コマンドと同様に通常の次のサイクルを開始する。そうでない場合は、パターンスペースの最初の改行までを削除し、次の入力行を読み込まずに、その結果のパターンスペースでサイクルを開始する。
h H
パターンスペースをホールドスペースにコピー/追加する。
g G
ホールドスペースをパターンスペースにコピー/追加する。
l
現在の行を「視覚的に曖昧性のない」形式でリストする。
width
現在の行を「視覚的に曖昧性のない」形式でリストし、width の文字で折り返す。このコマンドは GNU 拡張である。
n N
入力の次の行をパターンスペースに読み込む/追加する。
p
現在のパターンスペースを出力する。
P
現在のパターンスペースの最初の改行までを出力する。
s/regexp/replacement/
パターンスペースに対して regexp のマッチを試みる。マッチに成功すると、マッチした部分を replacement に置換する。replacement には特殊文字である & を含めることができ、これはパターンスペースのマッチした部分を参照する。また \1 から \9 までの特殊エスケープを含むこともでき、これは regexp の部分正規表現 (sub-expression) にマッチした部分をそれぞれ参照する。
label
直近の入力行が読み込まれて以降、かつ、直近の t あるいは T コマンド以降に、s コマンドが成功していれば、label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。
label
直近の入力行が読み込まれて以降、かつ、直近の t あるいは T コマンド以降に、s コマンドが成功していなければ、label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。このコマンドは GNU 拡張である。
filename
現在のパターンスペースを filename に書き込む。
filename
現在のパターンスペースの先頭行を filename に書き込む。このコマンドは GNU 拡張である。
x
ホールドスペースとパターンスペースの内容を交換する。
y/source/dest/
パターンスペースにある文字のうち、source にあるものを、dest の同じ位置にある文字に置換する。

アドレス

sed のコマンドはアドレスなしで指定することもでき、この場合そのコマンドは全ての入力行に対して実行される。アドレスをひとつ指定すると、コマンドはそのアドレスにマッチした入力行に対してのみ実行される。2 つのアドレスを指定すると、最初のアドレスにマッチした行から、2 番目のアドレスにマッチした行に至る範囲 (両マッチ行を含む) にあるすべての行に対して実行される。アドレスの範囲指定については次の 3 点を注意しておく。まず指定方法は addr1,addr2 である (つまりアドレスをコンマで区切る)。addr1 にマッチした行は、たとえaddr2 がそれ以前の行にマッチする場合でも、常に処理対象となる。addr2regexp (正規表現) の場合には、addr1 にマッチした行に対しては addr2 のマッチは行われない。

アドレス (あるいはアドレス範囲) とコマンドの間には ! を挟むことができる。この場合は、アドレス (あるいはアドレス範囲) がマッチしなかった行に対してのみコマンドが実行される。

以下のアドレスタイプがサポートされている。

number
number で指定した行にのみマッチする (コマンドラインで -s オプションを指定していない場合、行数はファイル間で通算でカウントされる)
first~step
first 行からはじまる step 行おきの行にマッチする。例えば ``sed -n 1~2p'' は 入力行のうち奇数行を出力し、アドレスを 2~5 にすると、第 2 行から 5 行おきに表示する。first は 0 を指定することが可能である。この場合、step に等しい値が指定されたものとして sed は処理する。(これは GNU 拡張である)。
$
最終行にマッチする。
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。

GNU sed は、次の特殊な 2 アドレス形式もサポートする。

0,addr2
「先頭アドレスにマッチした状態」で開始し、addr2 が見つかるまでその状態を維持する。これは、1,addr2 に類似しているが、次の点において挙動が異なる。addr2 が入力の先頭行にマッチする場合、0,addr2 形式ではアドレス範囲の終了位置にあるとみなされるが、1,addr2 形式ではアドレス範囲の開始位置にあるとみなされる。このアドレス指定は、addr2 が正規表現の場合にのみ機能する。
addr1,+N
addr1 から、addr1 以降の N 行にマッチする。
addr1,~N
addr1 から、addr1 以降の、入力行番号が N の倍数の行までマッチする。

正規表現

POSIX.2 BRE をサポートするべきであるが、性能上の問題により完全にはサポートしていない。正規表現内部の \n シーケンスは改行文字にマッチし、\a\t、およびその他のシーケンスも同様である。

バグ

バグレポートは [email protected] まで送ってください。また、可能であれば、「sed --version」の出力結果をレポート本文に記載してください。

著者

作者: Jay Fenlason, Tom Lord, Ken Pizzini, および Paolo Bonzini。GNU sed ホームページ: <http://www.gnu.org/software/sed/>。GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>。電子メールによるバグレポートの宛先: <[email protected]>。「Subject: 」フィールドのどこかに「sed」を記載してください。

著作権

Copyright © 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.