名前
sed -
テキストのフィルタリング、変換用のストリームエディター
書式
sed [OPTION]... {script-only-if-no-other-script}
[input-file]...
説明
sed
はストリームエディターです。ストリームエディターは、入力ストリーム
(ファイルまたはパイプラインからの入力)
に対して基本的なテキスト変換を行うために用いられます。sed
は
編集スクリプトを使える
(ed のような)
エディターと
いろいろな面で似ていますが、sed
は入力に対して 1
パスだけで動作するので、より効率的です。また
sed
はパイプラインのテキストに対してフィルター動作を行うことができ、この点は他のタイプのエディターとはっきり違います。
-n, --quiet, --silent
- パターンスペースの自動出力を抑制します
--debug
- プログラム実行状況を表示します
-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
拡張を無効にします
-E, -r, --regexp-extended
- スクリプトで拡張正規表現を使用します
(-E 利用は POSIX
互換性のため)
-s, --separate
- 複数の入力ファイルを一続きのストリームとして扱わずに個別のファイルとして扱います
--sandbox
- サンドボックス (sandbox)
モードで実行します
(e/r/w
コマンドを無効にします)
-u, --unbuffered
- 入力ファイルからデータをごく少量ずつ取り込み、頻繁に出力バッファを掃き出します
(flush)
-z, --null-data
- NUL
文字で行を分割します
- --help
- ヘルプを表示して終了します
- --version
- バージョン情報を出力して終了します
-e、--expression、-f、または
--file
オプションのいずれも指定されない場合、最初のオプションでない引数が
sed
スクリプトとして解釈されます。
残りの全ての引数は入力ファイル名として扱われます。
入力ファイルが指定されない場合は、標準入力から読み込みます。
GNU sed ホームページ:
<https://www.gnu.org/software/sed/>. GNU
ソフトウェアを使用する際の一般的なヘルプ:
<https://www.gnu.org/gethelp/>.
電子メールによるバグレポートの宛先:
<bug-sed@gnu.org>
コマンドの文法
これは 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
に合致するような行にマッチします。
マッチングは現在のパターン領域において行われます。
これは “s///”
のようなコマンドにより変更されます。
- \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、およびその他のシーケンスも同様です。
このかわりに -E
オプションは拡張正規表現の利用に切り替えるものです。
この拡張正規表現は、これまでに長らく
GNU sed
においてサポートされ、現在は
POSIX
に含まれるようになりました。
バグ
バグレポートは
bug-sed@gnu.org
まで送ってください。また可能であれば、
「sed
--version」の出力結果をレポート本文に記載してください。
著者
Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering,
Assaf Gordon.
この sed
プログラムは SELinux
サポートを含めてビルドされています。このシステム上においては
SELinux が有効です。
GNU sed ホームページ:
<https://www.gnu.org/software/sed/>. GNU
ソフトウェアを使用する際の一般的なヘルプ:
<https://www.gnu.org/gethelp/>.
電子メールによるバグレポートの宛先:
<bug-sed@gnu.org>
著作権
Copyright © 2020 Free Software Foundation, Inc. License
GPLv3+: GNU GPL version 3 or later
<https://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
で、完全なマニュアルを参照することができます。