日本語 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.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-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 (アドレス) があるコマンド行は、アドレスと一致するパターン 空間のすべてを選択します。 2 つの address (アドレス) があるコマンド行は、両端を含んだ範囲を選択しま す。この範囲は、最初の address (アドレス) と一致する最初のパターン空間で 始まります。範囲の終わりは、2 番目の address (アドレス) と一致する次のパ ターン空間です。2 番目のアドレスが、最初に選択された行番号以下の番号であ るなら、その行だけが選択されます。2 つめのアドレスの数は、最初のパターン の後に一致する行の数を指定するために (``+'') の接頭辞が付けられます。2 番 目の address (アドレス) がコンテキストアドレスである場合に、sed は、最初 の address (アドレス) に一致しているパターン空間に対して 2 番目の address (アドレス) を再び照合しません。選択された範囲に続く最初の行で開始すること によって、sed は、再び最初の address (アドレス) を検索し始めます。 エクスクラメーション文字 (``!'') 関数の使用によって選択されなかったパター ン空間に編集コマンドを適用することができます。 sed の正規表現 デフォルトで、sed で使用される正規表現は、基本的な正規表現 (BRE、詳細につ いては、re_format(7) を参照) ですが、-E フラグが与えられるなら、拡張され た (現代の) 正規表現を代わりに使用することができます。さらに、sed は、正 規表現に次の 2 つの追加があります: 1. コンテキストアドレスにおいて、バックスラッシュ (``\'') と改行以外の 文字を正規表現の区切りとして用いることできます。区切り文字の直前に バックスラッシュを置くことで、区切り文字をリテラルに解釈させることが できます。初めのデリミタは、それがスラッシュでないなら、バックスラッ シュが先行する必要があります。例えば、コンテキストアドレス \xabcx は、/abc/ と同等です。また、正規表現の中のデリミタ文字の前にバックス ラッシュ文字を置くことによって、文字は、リテラルとして扱われます。た とえば、コンテキストアドレス \xabc\xdefx において、RE (regular expression; 正規表現) 区切り文字は、``x'' で、2 つめの ``x'' は、そ れ自体を表すので、正規表現は、``abcxdef'' です。 2. エスケープシーケンス \n は、パターン空間に埋め込まれた改行文字と一致 します。しかしながら、利用者は、address (アドレス) または置換のコマ ンドのリテラルの改行文字を使用することはできません。 sed の正規表現の 1 つの特別な機能は、それらが、使用された最後の正規表現を デフォルトにするとができます。正規表現が空であるなら、すなわち、デリミタ 文字だけが指定されるなら、代わりに、遭遇した最後の正規表現が使用されま す。最後の正規表現は、コンパイル時ではなく、実行時に、address (アドレス) または置換のコマンドの部分として使用された最後の正規表現として定義されま す。例えば、コマンド ``/abc/s//XXX/'' は、パターン ``abc'' を ``XXX'' に 置換します。 sed の関数 コマンドの次のリストで、コマンドごとの許可された address (アドレス) の最 大の数は、[0addr], [1addr] または [2addr] によって示され、0、1 または 2 つの address (アドレス) を表します。 引数 text (テキスト) は、1 つ以上の行から成ります。改行をテキストに埋め込 むために、前にバックスラッシュを置きます。テキスト中の他のバックスラッ シュは、削除され、続く文字は、リテラルとして取られます。 ``r'' と ``w'' 関数は、空白類によって関数文字から区切られるべきである、オ プションのファイルパラメータを取ります。sed への引数として与えられる各 ファイルは、あらゆる入力処理が開始される前に、作成され (るか、または、そ の内容を切り詰め) ます。 ``b'', ``r'', ``s'', ``t'', ``w'', ``y'', ``!'' と ``:'' 関数すべては、追 加の引数を受け付けます。次の書式は、どの引数が空白類の文字によって関数文 字から区切られなければならないことを示します。 関数の 2 つは、関数リストを取ります。これは、次のように改行によって区切ら れた sed 関数のリストです: { function function ... function } ``{'' の前と後に空白類を置くことができます。関数の前に空白類を置くことが できます。最後の ``}'' は、改行の前に置かれなければならず、また、空白類の 前に置かれるかもしれません。 [2addr] function-list パターン空間が選択されるときのみ、関数リスト (function-list) を実 行します。 [1addr]a\ text ``N'' 関数を実行するか、または新しいサイクルを開始するかどうかに よって、入力の行を読み込むためにそれぞれの試みの直前に、text (テ キスト) を標準出力に書き込みます。 [2addr]b[label] 指定されたラベルがある ``:'' 関数に分木します。label が指定されな いなら、スクリプトの終わりにブランチ (分岐) します。 [2addr]c\ text パターン空間を削除します。0 または 1 つのアドレスで、または 2 つ のアドレス範囲の終わりで、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 進数として書き込まれます。長い行 は、改行が続いているバックスラッシュを表示することによって示され る折りたたみのポイントで折りたたまれます。各行の終わりは、``$'' でマークされます。 [2addr]n デフォルトの出力が抑制されなかったなら、パターン空間を標準出力に 書き込み、パターン空間と入力の次の行を置き換えます。 [2addr]N オリジナルの内容から、追加されたマテリアルを分離するために、埋め 込まれた改行文字を使用して、入力の次の行をパターン空間に付け加え ます。現在の行番号が変化することに注意してください。 [2addr]p パターン空間を標準出力に書き込みます。 [2addr]P 最初の改行文字までパターン空間を標準出力に書き込みます。 [1addr]q スクリプトの終わりにブランチし、新しいサイクルを開始せずに終了し ます。 [1addr]r file 入力の行を読み込む次の試みの直前に、ファイルの内容を標準出力にコ ピーします。あらゆる理由のためにファイルを読み込むことができない なら、それは、静かに無視され、エラー条件は、設定されません。 [2addr]s/regular expression/replacement/flags パターン空間の正規表現の最初のインスタンスのための置換文字列を置 換します。RE (regular expression; 正規表現) と置換を区切るための スラッシュの代わりに、バックスラッシュまたは改行以外のあらゆる文 字を使用することができます。RE と置換の中で、それにバックスラッ シュが先行するなら、リテラル文字として RE デリミタ自体を使用する ことができます。 置換に現れるアンパサンド (``&'') は、RE と一致する文字列で置き換 えられます。バックスラッシュをアンパサンドに先行することによっ て、この文脈の ``&'' の特別な意味を抑制することができます。文字列 ``\#'' は、ここで ``#'' 数値です、後方参照 (backreference) 表現 (re_format(7) を参照) に対応して一致しているテキストで置き換えら れます。 それに改行文字を置換することによって行を分割することができます。 置換文字列の改行文字を指定するためには、バックスラッシュでそれに 先行します。 置換の関数の flags の値は、次の 0 個以上です: N パターン空間の正規表現の N 番目の存在のためだけに置 換を行ないます。 g ちょうど最初のものではなく正規表現のすべてのオーバ ラップしない一致のための置換を行ないます。 p 置換が行なわれたなら、パターン空間を標準出力に書き 込みます。置換文字列が、それが置き換えるものと同一 であるなら、それは、まだ、置換されていたと見なされ ます。 w file 置換が行なわれたなら、パターン空間を file (ファイ ル) に付け加えます。置換文字列が、それが置き換える ものと同一であるなら、それは、まだ、置換されていた と見なされます。 i または I 大文字と小文字を区別しない方法で正規表現を照合しま す。 [2addr]t [label] あらゆる置換が入力行のつい最近の読み込みまたは ``t'' 関数の実行以 後行なわれていたなら、label (ラベル) を持っている ``:'' 関数にブ ランチします。label (ラベル) が指定されていないなら、スクリプトの 終わりにブランチします。 [2addr]w file パターン空間を file (ファイル) に付け加えます。 [2addr]x パターン空間とホールド空間の内容を交換します。 [2addr]y/string1/string2/ パターン空間の string1 の文字のすべての発生を、string2 から対応し ている文字と置き換えます。文字列を区切るためのスラッシュの代わり に、バックスラッシュまたは改行以外のあらゆる文字を使用することが できます。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.4 March 27, 2017 FreeBSD 11.4