日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
SED(1) FreeBSD 一般コマンドマニュアル SED(1) 名称 sed -- ストリームエディタ 書式 sed [-Ealnru] command [file ...] sed [-Ealnr] [-e command] [-f command_file] [-I extension] [-i extension] [file ...] 解説 sed ユーティリティは、指定されたファイルを読み込むか、またはファイルが指 定されていないなら、標準入力を読み込み、コマンドのリストによって指定され るように入力を修正します。そして、入力は、標準出力に書き込まれます。 sed への最初の引数として単一のコマンドを指定することができます。-e または -f オプションを使用することによって複数のコマンドを指定することができま す。すべてのコマンドは、それらの由来にかかわらず、それらが指定された順序 で入力に適用されます。 次のオプションが利用可能です: -E 基本的な正規表現 (BRE) ではなく拡張 (現代の) 正規表現として正規表 現を解釈します。re_format(7) マニュアルページは、両方の形式を完全 に記述しています。 -a ``w'' 関数のためのパラメータとしてリストされるファイルは、デフォ ルトであらゆる処理が開始される前に、作成され (または切り詰められ) ます。-a オプションによって、sed は、関連する ``w'' 関数を含んで いるコマンドが入力の行に適用されるまで、各ファイルをオープンする ことを遅らせます。 -e command コマンドのリストに command 引数によって指定される編集コマンドを追 加します。 -f command_file コマンドのリストにファイル command_file で見つけられる編集コマン ドを追加します。編集コマンドは、それぞれ個別の行でリストされるべ きです。 -I extension 指定された extension (拡張子) を付けてバックアップを保存して、イ ンプレース (in-place) でファイルを編集します。長さ 0 の extension (拡張子) が与えられるなら、バックアップは、保存されません。破損ま たはディスク空間が使い果たされるなどの場合の状況での不完全な内容 のリスクがあるので、インプレースのファイルを編集するとき、長さ 0 の extension (拡張子) を与えることは推奨されません。 -I でその場での編集することは、すべてのファイルをカバーする単一の 連続的なアドレス空間でまだ行われていますが、各ファイルは、1 つの 出力ストリームを形成することの代わりに個別に保存することに注意し てください。行カウンタは、ファイルの間で決してリセットされず、ア ドレスの範囲は、ファイルの境界をまたぐことができます、そして、 ``$'' アドレスは、最後のファイルの最後の行だけにマッチします。 (sed のアドレスを参照。) それは、-i を使用することが望まれている ところで、その場で編集する多くの場合に予期しない結果となるかもし れません。 -i extension その場でファイルを編集する -I と同様ですが、各ファイルを他のファ イルと別個に扱います。特に、各ファイルの行番号は、1 から始まり、 ``$'' アドレスは現在のファイルの最後の行にマッチし、アドレスの範 囲は、現在のファイルに制限されます。(sed のアドレスを参照してくだ さい。) 最終結果は、まるで各ファイルが別々の sed インスタンスで編 集されたかのようになります。 -l 出力行をバッファリングします。 -n デフォルトでは、入力行は、すべてのコマンドを適用した後に標準出力 に書き込まれます。-n オプションはこの動作を禁止し、明示的な出力コ マンドが適用された入力のみを出力します。 -r GNU sed との互換性のために -E と同じです。 -u バッファリングされない出力を行います。 sed のコマンドの形式は、次の通りです: [address[,address]]function[arguments] コマンドの最初の address と function 部分の前に空白類を挿入することができ ます。 通常、sed は、パターン空間に終端の改行を含めずに入力の行を周期的にコピー し、(``D'' 機能の後になにかが残っていないなら) そのパターン空間を選択し、 パターン空間を標準出力にコピーし、改行を追加し、そしてパターン空間を削除 して、address でコマンドのすべてを適用します 機能のいくつかは、その後の検索のためにパターン空間のすべてまたは部分を格 納するために、ホールド空間使用します。 sed のアドレス アドレスは、必須ではありませんが、指定されるなら、次の形式の 1 つでなけれ ばなりません: • 入力ファイルに渡って (または、-i オプションが有効であるなら、各 ファイルで個別に) 累積的な入力行をカウントする数。 • 入力の最後の行 (または、-i オプションが指定されたなら、現在の ファイルの最後の行) のアドレスを指定するドル (``$'') 文字。 • 先行する正規表現に続くデリミタ (区切り文字) から成るコンテキス トアドレス。また、オプションで、終わりのデリミタには、正規表現 が大文字と小文字を区別しない方法でマッチされることを示すために ``I'' 文字を続けることができます。 address 指定を持たないコマンドは、すべてのパターン空間を選択します。 1 つの address 指定を持つコマンドは、その address 指定にマッチするすべて のパターン空間を選択します。 2 つの address 指定を持つコマンドは、address の両端を含んだ範囲を選択しま す。この範囲は、1 つめの address にマッチしたパターン空間で始まり、その後 に続く 2 つめの address にマッチしたパターン空間で終わります。2 つめの address が、1 つめの address で選択された行番号以下の番号である場合、1 つ めの address が指定する行のみ選択されます。2 つめのアドレスの数は、最初の パターンの後にマッチする行の数を指定するために (``+'') の接頭辞が付けられ ます。2 つめの address がコンテキストアドレスである場合、sed は、1 つめの address にマッチしたパターン空間を 2 つめの address に再びマッチさせよう とはしません。sed は、選択された範囲の次の行から、1 つめの address にマッ チする行の検索を再開します。 エクスクラメーション関数 (``!'') を用いることにより、address で選択されて いない範囲に編集コマンドを適用させることもできます。 sed の正規表現 sed で使われる正規表現は、デフォルトでは、Basic Regular expression (BRE re_format(7) を参照) ですが、-E フラグを指定すると、拡張 (モダン) 正規表 現を使用可能です。正規表現に加え、sed では以下の拡張がなされています。 1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。初めのデリミタは、それがスラッシュでないなら、バックスラッ シュが先行する必要があります。例えば、コンテキストアドレス \xabcx は、/abc/ と同等です。また、正規表現の中のデリミタ文字の前にバックス ラッシュ文字を置くことによって、文字は、リテラルとして扱われます。た とえば、コンテキストアドレス \xabc\xdefx において、RE 区切り文字は、 ``x'' で、2 つめの ``x'' は、それ自体を表すので、正規表現は、 ``abcxdef'' です。 2. エスケープシーケンス \n は、パターン空間に埋め込まれた改行にマッチし ます。しかし、address と置換コマンド中にリテラルな改行を含めることは できません。 sed の正規表現には、デフォルト値の機能があります。もし、正規表現が空、す なわち、区切りのみが指定されたなら、直前に用いられた正規表現が用いられま す。直前の正規表現とは、最後に使われた address または置換コマンド中の正規 表現です。最後とは実行時の順番であり、指定されたコマンドの並びとは異なり ます。たとえば、``/abc/s//XXX/'' はパターン ``abc'' を ``XXX'' で置換しま す。 sed の関数 以下のコマンドの一覧では、指定可能な最大 address 数を、[0addr]、[1addr]、 [2addrs] と表記しています。これらは、それぞれ最大 0、1、2 個の address を 指定することができることを意味します。 text 引数のテキストは複数行に渡ることができます。改行の直前にバックスラッ シュを置くことで、テキストに改行を含めることができます。その他のバックス ラッシュは取り除かれ、直後の文字がリテラルに解釈されます。 ``r'' と ``w'' 関数は、オプショナルなファイル名引数をとります。ファイル名 は、関数名のあとに空白を置いてから指定する必要があります。sed の引数とし て指定されたファイルは、入力ファイルの処理を開始する前に作成 (または、内 容を消去) します。 ``b'', ``r'', ``s'', ``t'', ``w'', ``y'', ``!'' と ``:'' 関数は、オプショ ナルな引数をとることができます。以下の一覧に、どの引数が関数名のあとに空 白を置いてから指定しなければならないかが記述してあります。 2 つの関数は引数として関数リストをとります。関数リストは、以下の形式の改 行で区切られた sed 関数の羅列です。 { 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 (文字エル)。パターン空間の内容を読めるような以下の形式で出力しま す。 バックスラッシュ \\ 警告 \a フォームフィード \f キャリッジリターン \r タブ \t 垂直タブ \v 印字不可能な文字は、各バイトごとにバックスラッシュ (\) に続いて 3 桁の 8 進数で出力されます (Most Significant Byte が先頭です)。長 い行は折り返して表示されます。折り返した部分は、バックスラッシュ (\) に続く改行で示されます。各行の最後には、``$'' が出力されま す。 [2addr]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_format(7) 参照)。 replacement に改行を含めることで、入力行を分割することができま す。改行の直前にバックスラッシュを置くことで、replacement 中に改 行を含めることができます。 s 関数の flags には、以下のものを0個以上指定できます。 N パターン空間で N 回目にマッチした regular expres sion のみを置換します。 g 先頭だけではなく、重なりあわない全てのマッチした内 容を replacement で置換します。 p 置換が行われたら、パターン空間の内容を標準出力に書 き込みます。もし、置換後の内容が置換前のものと同一 でも置換が行われたとみなします。 w file もし置換が行われたなら、パターン空間の内容をファイ ル file に追加します。もし、置換後の内容が置換前の ものと同一でも置換が行われたとみなします。 i または I 大文字と小文字を区別しない方法で正規表現をマッチし ます。 [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) に 記述されているように sed の実行に影響します。 終了ステータス ユーティリティ sed は、成功すると 0 で、エラーがあった場合は >0 で終了し ます。 使用例 別のコマンドからパイプで渡されるとき、`bar' を `baz' に置き換えます: echo "An alternate word, like bar, is sometimes used in examples." | sed 's/bar/baz/' バックスラッシュを使用することは、次のように、時々、読みづらくなるかもし れません: echo "/home/example" | sed 's/\/home\/example/\/usr\/local\/example/' 異なるセパレータを使用することは、パスを扱うとき、便利になるかもしれませ ん: echo "/home/example" | sed 's#/home/example#/usr/local/example#' ファイルのバックアップを作成せずに、ファイル test.txt の `foo' のすべての 存在を `bar' に置き換えます: sed -i '' -e 's/foo/bar/g' test.txt 関連項目 awk(1), ed(1), grep(1), regex(3), re_format(7) 規格 sed ユーティリティは、IEEE Std 1003.2 (``POSIX.2'') 仕様のスーパセットと なっているはずです。 アドレスの範囲の 2 つめのメンバで ``+'' の接頭辞がつけられた、-E, -I, -a と -i オプションは、アドレスの正規表現と置換コマンドの ``I'' フラグと同様 に、非標準の FreeBSD の拡張であり、他のオペレーティングシステムで利用可能 でないかもしれません。 歴史 L. E. McMahon によって書かれた sed コマンドは、Version 7 AT&T UNIX で登場 しました。 作者 Diomidis D. Spinellis <dds@FreeBSD.org> バグ 値 0x5C (ASCII `\') のバイトを含むマルチバイト文字は、``a'', ``c'' と ``i'' コマンドへの引数で、行継続文字として間違って扱われるかもしれませ ん。``s'' と ``y'' コマンドで区切り文字としてマルチバイト文字を使用するこ とはできません。 FreeBSD 11.2 March 27, 2017 FreeBSD 11.2