書式
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/>.
電子メールによるバグレポートの宛先:
<bug-sed@gnu.org>. 「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
拡張である。
- r filename
- filename
から読み込んだテキストを追加する。
- R filename
- filename から 1
行読み込み、追加する。コマンドを起動するたびにファイルから次の
1
行を読み込む。このコマンドは
GNU 拡張である。
アドレス範囲を指定できるコマンド
- {
- コマンドブロックを開始する
(} で終了する)。
- b label
- label に分岐する。label
が省略された場合は、スクリプトの末尾に分岐する。
- c \
- text
- 選択した行を text
で置換する。text
に改行を含めたい場合は、その前にバックスラッシュを置く。
- d
- パターンスペースを削除する。次のサイクルを開始する。
- D
- パターンスペースに改行がない場合は、d
コマンドと同様に通常の次のサイクルを開始する。そうでない場合は、パターンスペースの最初の改行までを削除し、次の入力行を読み込まずに、その結果のパターンスペースでサイクルを開始する。
- h H
- パターンスペースをホールドスペースにコピー/追加する。
- g G
- ホールドスペースをパターンスペースにコピー/追加する。
- l
- 現在の行を「視覚的に曖昧性のない」形式でリストする。
- l width
- 現在の行を「視覚的に曖昧性のない」形式でリストし、width
の文字で折り返す。このコマンドは
GNU 拡張である。
- n N
- 入力の次の行をパターンスペースに読み込む/追加する。
- p
- 現在のパターンスペースを出力する。
- P
- 現在のパターンスペースの最初の改行までを出力する。
- s/regexp/replacement/
- パターンスペースに対して
regexp
のマッチを試みる。マッチに成功すると、マッチした部分を
replacement
に置換する。replacement
には特殊文字である
&
を含めることができ、これはパターンスペースのマッチした部分を参照する。また
\1 から \9
までの特殊エスケープを含むこともでき、これは
regexp の部分正規表現
(sub-expression)
にマッチした部分をそれぞれ参照する。
- t label
- 直近の入力行が読み込まれて以降、かつ、直近の
t あるいは T
コマンド以降に、s
コマンドが成功していれば、label
に分岐する。label
が省略された場合は、スクリプトの末尾に分岐する。
- T label
- 直近の入力行が読み込まれて以降、かつ、直近の
t あるいは T
コマンド以降に、s
コマンドが成功していなければ、label
に分岐する。label
が省略された場合は、スクリプトの末尾に分岐する。このコマンドは
GNU 拡張である。
- w filename
- 現在のパターンスペースを
filename に書き込む。
- W filename
- 現在のパターンスペースの先頭行を
filename
に書き込む。このコマンドは
GNU 拡張である。
- x
- ホールドスペースとパターンスペースの内容を交換する。
- y/source/dest/
- パターンスペースにある文字のうち、source
にあるものを、dest
の同じ位置にある文字に置換する。
アドレス
sed
のコマンドはアドレスなしで指定することもでき、この場合そのコマンドは全ての入力行に対して実行される。アドレスをひとつ指定すると、コマンドはそのアドレスにマッチした入力行に対してのみ実行される。2
つのアドレスを指定すると、最初のアドレスにマッチした行から、2
番目のアドレスにマッチした行に至る範囲
(両マッチ行を含む)
にあるすべての行に対して実行される。アドレスの範囲指定については次の
3
点を注意しておく。まず指定方法は
addr1,addr2 である
(つまりアドレスをコンマで区切る)。addr1
にマッチした行は、たとえaddr2
がそれ以前の行にマッチする場合でも、常に処理対象となる。addr2
が regexp (正規表現)
の場合には、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、およびその他のシーケンスも同様である。
バグ
バグレポートは
bug-sed@gnu.org
まで送ってください。また、可能であれば、「sed
--version」の出力結果をレポート本文に記載してください。
著者
作者: Jay Fenlason, Tom Lord, Ken Pizzini,
および Paolo Bonzini。GNU sed
ホームページ:
<http://www.gnu.org/software/sed/>。GNU
ソフトウェアを使用する際の一般的なヘルプ:
<http://www.gnu.org/gethelp/>。電子メールによるバグレポートの宛先:
<bug-sed@gnu.org>。「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.
関連項目
awk(1), ed(1), grep(1), tr(1),
perlre(1), sed.info, sed
に関する様々な本, sed
FAQ (http://sed.sf.net/grabbag/tutorials/sedfaq.txt),
http://sed.sf.net/grabbag/.
sed
の完全な文書は、Texinfo
マニュアルでメンテナンスされている。info
と sed
プログラムが適切にインストールされていれば、
- info sed
で、完全なマニュアルを参照することができる。