ed(1) FreeBSD 一般コマンドマニュアル

ed

前のページ 上に戻る 次のページ

ed




解説

     ed は、行指向のテキストエディタです。本コマンドを用いることで、テキスト
     ファイルの生成、表示、変更その他の操作を行なうことができます。

     file 引数を指定して本コマンドを起動すると、ファイル file のコピーをエディ
     タのバッファに読み込みます。以後の変更はそのコピーに対して行なわれ、 file
     で指定したファイル自身が直接変更されることはありません。 ed コマンドを終
     了する際、 w コマンドで明示的にセーブしなかった変更点はすべて失われます。

     編集は、 コマンドモードと 入力モードの 2 つの異なるモードを使い分けて行な
     います。 ed を起動したら、まずコマンドモードに入ります。本モードでは、標
     準入力からコマンドを読み込み、それを実行することでエディタバッファの内容
     操作を行ないます。典型的なコマンドは、以下のようなものです。

     ,s/old/new/g

     これは、編集しているテキストファイル中に old という文字列があったら、これ
     らをすべて文字列 new に置き換えるコマンドです。

     a (append)、 i (insert)、あるいは c (change) といった入力コマンドが入力さ
     れた場合、 ed は入力モードに移行します。これが、ファイルにテキストを追加
     する主たる方法です。このモードでは、コマンドを実行することはできません。
     そのかわり、標準入力から入力されたデータは、直接エディタバッファへと書き
     込まれます。行は、改行キャラクタまでのテキストデータおよび、最後の 改行
     キャラクタを含むデータから構成されます。ピリオド 1 つだけ (.) の行を入力
     すると、入力モードを終了します。

     すべての ed コマンドは、全ての行もしくは指定した範囲の行の操作が可能で
     す。例えば、 d コマンドは指定した行を削除し、 m コマンドは指定した行を移
     動します。上に示した例のように、置換によってある行の一部分のみを変更する
     ことは可能ですが、 s コマンドは、一度に全部の行にわたって変更を行なうこと
     も可能です。

     一般的には、 ed コマンドは、0 個以上の行番号および、それに連なる 1 文字コ
     マンドから成り立ちます。場合によっては追加のパラメータをもつこともありま
     す。いうなれば、コマンドは以下の構造を持ちます。

     [address[,address]]command[parameters]

     行番号はコマンドの操作対象行あるいは対象行範囲を示します。行番号の指定個
     数が、コマンドが受け付け可能な個数よりも少ない場合には、デフォルトの行番
     号が採用されます。


オプション

     以下のオプションが使用できます。

     -s      診断メッセージを抑制します。本オプションは、 ed の入力がスクリプ
             トによって行なわれる場合に有効です。

     -x      続く読み書きの際に行なわれる暗号化に用いる鍵の入力を促します ( x
             コマンドを参照して下さい)。


行指定

     行は、バッファ内の行番号で表現されます。 ed は 現在行を管理しており、コマ
     ンドに行番号が指定されない場合は、現在行がデフォルト行として用いられま
     す。ファイルが最初に読み出された直後は、現在行はファイルの最後の行となり
     ます。一般的に、現在行はコマンドが操作した最後の行となります。

     行番号は、以下の一覧のうち 1 つおよび、補助的に付加される相対行番号 (オフ
     セット) から構成されます。相対行番号は、任意の数字の組み合わせと演算子、
     そして空白文字を含みます ( 例えば +, -^ が演算子に含まれます ) 。行番
     号は、左から右に解釈され、それらの演算子を含む値は、現在行からの相対行番
     号と解釈されます。

     行番号の表現に関して上記の規則が適用される中で、行番号 0 ( ゼロ ) に関し
     ては、例外的な扱いがされます。これは「最初の行より前」を意味し、それが正
     しい意味を持つ場合は常に利用可能です。

     行範囲は、コンマもしくはセミコロンで区切られた 2 つのアドレスで示されま
     す。最初に指定される行番号は、2 番目に指定される行番号を超える値を指定し
     てはいけません。行範囲指定で行番号が 1 つしか指定されなかった場合には、2
     番目に指定されるアドレスとして最初に指定されたアドレスが設定されます。こ
     こで 3 個以上の行番号が指定されると、最後の 2 つの行番号で決定される範囲
     がコマンド実行対象になります。行番号の指定を 1 つだけしか想定していないコ
     マンドの場合、最後の 1 つの行番号の行がコマンド実行対象となります。

     コンマで区切られた各行番号は、現在行からの相対行を指し示します。セミコロ
     ンで区切られている場合は、範囲の始めの行は現在行が設定され、範囲の終りは
     始めの行からの相対行で表わされます。

     行番号の指定には、以下のシンボルが使用可能です。

     .       バッファ中の現在行を表します。

     $       バッファ中の最終行を表します。

     n       バッファ内の n 番目の行を表します。 n は、 [0,$] の間です。

     - or ^  1 行前の行です。相対行指定 -1 と同等であり、複数指定することで効
             果を累積することが可能です。

     -n or ^n
             n 行前の行を表します。 n は、負でない整数です。

     +       次の行を表します。これは、 +1 と同様であり、 - と同様の累積的指定
             が可能です。

     +n or whitespace
             n 行後ろの行を表します。 n は、負でない整数です。 n の前に
             whitespace (空白文字) を付加して指定した場合も +n と解釈されま
             す。

     , or %  バッファの最初から最後までを表します。これは、 1,$ と指定した場合
     'lc     k (mark)  コマンドでマークをつけた行を表します。ここで lc は、英
             小文字1文字です。


正規表現

     正規表現はテキストを選択する際に用いるパターンです。例えば次の ed コマン
     ド

     g/string/

     は string を含む全ての行を表示します。正規表現は s コマンドで古いテキスト
     を新しいテキストで置き換える際にも用いられます。

     文字リテラルを指定するのに加え、正規表現は文字列のクラスを表現することが
     できます。このようにして表現された文字列は、それに対応する正規表現に
     「マッチする」と言います。ある正規表現が一つの行の中の複数の文字列にマッ
     チする場合、マッチする部分のうち最も左にあって最も長いものが選択されま
     す。

     正規表現を組み立てる際には以下のシンボルが用いられます:

     c       以下に挙げるものを除く任意の文字 c は、その文字自身にマッチしま
             す。このような文字には `{', '}', `(', `)', `<', `>' が含まれま
             す。

     \c      バックスラッシュでエスケープした文字 c は、その文字自身にマッチし
             ます。ただし `{', '}', `(', `)', `<', `>' を除きます。

     .       任意の一文字にマッチします。

     [char-class]
             文字クラス char-class に含まれる任意の一文字にマッチします。文字
             クラス char-class に `]' を含めるには、文字 `]' を最初の文字に指
             定します。文字の範囲を指定するには、範囲の両端の文字の間を `-' で
             つなぎます。例えば `a-z' は小文字全体を表します。以下のようなリテ
             ラル表記も、文字集合を指定するために文字クラス char-class で使用
             することができます:

             [:alnum:]    [:cntrl:]    [:lower:]    [:space:]
             [:alpha:]    [:digit:]    [:print:]    [:upper:]
             [:blank:]    [:graph:]    [:punct:]    [:xdigit:]

             文字クラス char-class の最初あるいは最後の文字として `-' が用いら
             れると、それはその文字自身にマッチします。文字クラス char-class
             中のこれ以外の文字は全て、それら自身にマッチします。

             以下の形式の文字クラス中のパターン:

               [.col-elm.] or,
               [=col-elm=]

             は locale(5) に沿って解釈されます (現在のところサポートされませ
             ん)。ここで col-elmcollating element です。詳しい説明は

     \>      これに続く単一文字の正規表現あるいはその部分式が、単語の末尾での
             みマッチするようにします (この機能は利用できない場合があります)。

     \(re\)  部分式 (subexpression) re を定義します。部分式はネストできます。
             これ以降、 \n ( n は [1,9] の範囲の数) の形式の後方参照は、 n 番
             目の部分式にマッチしたテキストに展開されます。例えば、正規表現
             `\(.*\)\1' は、同じ文字列が隣接しているような任意の文字列にマッチ
             します。部分式は左側のデリミタから順に番号が振られます。

     *       直前にある単一文字の正規表現あるいはその部分式のゼロ回以上の繰り
             返しにマッチします。 * が正規表現あるいはその部分式の最初の文字と
             して用いられた場合、 * はその文字自身にマッチします。 * 演算子は
             時に予期しない結果をもたらすことがあります。例えば、正規表現 `b*'
             は文字列 `abbb' の先頭にマッチします (部分文字列 `bbb' ではありま
             せん)。これはヌルへのマッチが最も左にあるマッチだからです。

     \{n,m\} or \{n,\} or \{n\}
             直前にある単一文字の正規表現あるいはその部分式の、 n 回以上 m 回
             以下の繰り返しにマッチします。 m が省略された場合、 n 回以上の繰
             り返しにマッチします。更にコンマも省略された場合、ちょうど n 回の
             繰り返しにのみマッチします。

     各 regex(3) の実装によっては、更に正規表現演算子がいくつか定義されている
     ことがあります。


コマンド

     全ての ed コマンドは、1 文字からなりますが、追加パラメータが必要なコマン
     ドもあります。コマンドのパラメータが複数の行にわたる場合には、そのパラメ
     ータを含めたコマンドの終りを含む行を除き、行末にバックスラッシュ (\) を付
     加して下さい。

     一般的には、1 行ごとに 1 コマンドを入れることが許されています。しかしなが
     ら、ほとんどのコマンドは、コマンド実行を行なった後のデータ更新その他を確
     認するために、 p (print)、や l (list)、 n (enumerate), のような表示系のコ
     マンドを同時に指定できます。

     インタラプト (一般的には ^C) を入力することで、現在実行しているコマンドを
     強制終了し、コマンドモードに戻すことができます。

     ed は、以下のコマンドを使用できます。コマンド実行時に何の指定もない場合の
     デフォルトの行番号もしくは行範囲が括弧内に示されています。

     (.)a    指定した行の後にテキストを追加します。テキストは入力モードで入力
             されていきます。現在行番号は、入力された最後の行に設定されます。

     (.,.)c  バッファ内の指定した行を変更します。指定した行のデータは、バッ
             ファから消去され、そこに対してテキストデータを入力するようになり
             ます。テキストは入力モードで入力されていきます。現在行番号は、入
             力した最後の行に設定されます。

     (.,.)d  指定した範囲をバッファから削除します。削除した範囲の後に行が続い
             現在行番号は、入力された最後の行に設定されます。

     E file  無条件で file で指定したファイルを読み込み、編集します。 e コマン
             ドと動作は似ていますが、すでにバッファ上のデータに変更が加えられ
             ている場合でも、未書き込みの変更を警告を出さずに捨ててしまう点が
             異なります。現在行番号は、入力された最後の行に設定されます。

     f file  デフォルトファイル名を file に設定します。 file 名が指定されない
             場合には、デフォルトファイル名が表示されます。

     (1,$)g/re/command-list
             command-list で指定されたコマンドを、指定した正規表現 re に一致す
             る各行に対して実行します。現在行番号は、 command-list で指定され
             たコマンドが実行される前に、指定した正規表現に一致した行に設定さ
             れます。 g コマンドが終了した場合、現在行番号は最後に
             command-list 実行の影響を受けた行に設定されます。

             command-list で指定されるコマンドは、1 行ごとに 1 つずつ書かれる
             必要があります。各コマンド行の終りには、一番最後のコマンド行を除
             いてはバックスラッシュ (\) を記述する必要があります。コマンド g,
             G, v, V を除くすべてのコマンドを指定可能です。 command-list 中の
             空行は、 p コマンドと同等に扱われます。

     (1,$)G/re/
             指定した正規表現 re に一致した行に対して、対話編集を行ないます。
             指定した正規表現に一致する文字列を含む行があると、その行を表示
             し、現在行番号を設定します。そして、ユーザに command-list の入力
             を促します。 G コマンドが終了した場合、現在行番号は、
             command-list 実行の影響を受けた最後の行に設定されます。

             command-list の記述形式は、 g コマンドで指定するものと同じです。
             改行のみの場合は、コマンド実行をしない ( ヌルコマンドリストを指定
             した ) ものとみなされます。 `&' 文字のみを入力した場合には、直前
             に実行した ( ヌルコマンドリストではない ) コマンドを再実行しま
             す。

     H       エラーメッセージの出力の有無を切り替えます。デフォルトでは、エラ
             ーメッセージは出力されません。 ed スクリプトを作成する場合、スク
             リプトのデバッグのために、本コマンドを最初に実行することをおすす
             めします。

     h       最後に表示されたエラーメッセージを表示します。

     (.)i    編集バッファ中の現在行の前に、テキストを挿入します。テキストは入
             力モードで入力されていきます。現在行番号は、入力された最後の行に
             設定されます。

     (.,.+1)j
             指定した範囲の行を 1 行に連結します。指定した行はバッファから削除
             され、その行の内容を含む 1 行に置き換えられます。現在行番号は、置
             き換えられた行に設定されます。

             ゼロ) が指定可能です。現在行番号は、移動された最後の行に設定され
             ます。

     (.,.)n  指定した行の内容を、行番号つきで表示します。現在行番号は、表示さ
             れた最後の行に設定されます。

     (.,.)p  指定した範囲の行の内容を表示します。現在行番号は、表示された最後
             の行に設定されます。

     P       コマンドプロンプト表示の有無を切り替えます。コマンド起動時のオプ
             ション -p string でプロンプトが指定されていなければ、コマンドプロ
             ンプトの表示はデフォルトでオフになっています。

     q       ed を終了します。

     Q       無条件に ed を終了します。このコマンドは q コマンドと似ています
             が、まだファイルに書き出されていない変更があっても警告せずに終了
             する点が異なります。

     ($)r file
             file で指定されたファイルを、指定した行の後ろに読み込みます。
             file が指定されない場合、デフォルトのファイル名が読み込みに使用さ
             れます。このコマンドに先だってデフォルトのファイル名が設定されて
             いない場合、デフォルトのファイル名には、 file で指定されたものが
             設定されます。それ以外の場合、デフォルトのファイル名は変更されま
             せん。現在行番号は、読み込まれたファイルの最後の行に設定されま
             す。

     ($)r !command
             command で指定されたコマンドを実行し、その結果として標準出力へ出
             力されたデータを指定した行の後ろに読み込みます (後述する
             file ...! command を参照して下さい)。デフォルトのファイル名は変更
             されません。現在行番号は、読み込まれた最後の行の行番号に設定され
             ます。

     (.,.)s/re/replacement/

     (.,.)s/re/replacement/g

     (.,.)s/re/replacement/n
             指定した行のテキスト中の、正規表現 re に一致する文字列を、文字列
             replacement に置き換えます。デフォルトでは、それぞれの行で最初に
             一致した文字列のみを置き換えます。 g (global) サフィックスが指定
             された場合、一致した文字列はすべて置き換えられます。 n サフィック
             ス ( n は正の整数) が指定された場合、 n 回目に一致した文字列だけ
             を置き換えます。指定した範囲で一度も文字列の置換が起こらなかった
             場合、エラーとみなされます。現在行番号は、最後に置換が発生した行
             に設定されます。

             re および replacement は、スペースおよび改行を除くすべてのキャラ
             クタを用いて区切ることが可能です (後述する s コマンドを見て下さ
             い)。最後のデリミタのうち 1 つか 2 つが省略された場合、最後に文字
             た文字列の変わりに、最後に指定した正規表現が使用されます。 g サ
             フィックスは、最後の置換で用いたグローバルサフィックスの使用の有
             効/無効を切り替えます。 p サフィックスは、最後の置換に指定された
             プリントサフィックスを反転します。現在行番号は、最後に置換が発生
             した行に設定されます。

     (.,.)t(.)
             指定した範囲の行を、コマンド文字の右辺に指定した行番号の後にコピ
             ー (つまり転送) します。コピー先の行番号としては、 0 (ゼロ) の指
             定が許されています。現在行番号は、コピーした一番最後の行の行番号
             に設定されます。

     u       最後に実行したコマンドの実行結果を取り消し、現在行番号を、取り消
             したいコマンドが実行される前のものに戻します。グローバルコマンド
             である gGvV については、その改変は 1 コマンドで行なわ
             れたとして扱います。 u は自分自身の動作を取り消すこともできます。

     (1,$)v/re/command-list
             指定した範囲の行のうち、指定した正規表現 re と一致する文字列が含
             まれていない行について、 command-list で指定したコマンドを実行し
             ます。これは g コマンドに動作が似ています。

     (1,$)V/re/
             指定した範囲の行のうち、指定した正規表現 re に一致する文字列が含
             まれていない行について、対話編集を行ないます。これは G コマンドに
             動作が似ています。

     (1,$)w file
             指定した範囲の行を、 file で指定したファイルに書き出します。それ
             まで file に格納されていた内容は、警告なしに消去されます。デフォ
             ルトファイル名が設定されていない場合、デフォルトファイル名は file
             に設定されます。それ以外の場合では、デフォルトファイル名は変更さ
             れません。ファイル名が指定されなかった場合には、デフォルトファイ
             ル名が使用されます。現在行番号は変更されません。

     (1,$)wq file
             指定した範囲の行を file で指定したファイルに書き出し、 q コマンド
             を実行します。

     (1,$)w !command
             指定した範囲の行の内容を !command の標準入力に書き出します (
             !command については、以下の説明を参照して下さい)。デフォルトファ
             イル名および現在行番号は変更されません。

     (1,$)W file
             指定した範囲の行の内容を、 file で指定したファイルの後ろに追加書
             き込みします。 w コマンドと似ていますが、指定したファイルにそれま
             で格納されていた内容がなくなることはありません。現在行番号は変更
             されません。

     x       以降の読み書きで用いられる暗号化鍵の入力を促します。改行のみが入
             力されると、暗号化は解除されます。それ以外の場合、キー読み込み中
             ルトファイル名に置き換えられます。シェルがコマンド実行から戻って
             きた場合には、`!' が標準出力に出力されます。現在行番号は変更され
             ません。

     ($)=    指定された行の行番号を表示します。

     (.+1)newline
             指定した行を表示します。そして、現在行番号を表示した行のものに設
             定します。


関連ファイル

     /tmp/ed.*  バッファファイル
     ed.hup     端末が回線切断した場合に、 ed がバッファ内容を書き出すファイル


関連項目

     bdes(1), sed(1), sh(1), vi(1), regex(3)

     USD:12-13

     B. W. Kernighan and P. J. Plauger, Software Tools in Pascal, 1981,
     Addison-Wesley.


制限

     edfile 引数に対してバックスラッシュエスケープ処理を施します。つまり、
     ファイル名中でバックスラッシュ (\) を前につけた文字は、リテラルとして解釈
     されます。

     (バイナリではない) テキストファイルの最後が改行文字で終っていない場合、
     ed はそれを読み書きする際に改行文字を追加します。バイナリファイルの場合
     は、 ed はこのような改行文字追加は行いません。

     1 行あたりのオーバヘッドは整数 4 つ分です。


診断

     エラーが発生すると、 ed は `?' を表示し、コマンドモードに戻るか、スクリプ
     トによる実行のエラーの場合にはプログラムを終了します。最後のエラーメッセ
     ージについての説明は、 h (help) コマンドを用いることで表示可能です。

     g (global) コマンドは、検索や置換が失敗したというエラーを隠蔽します。その
     ため、スクリプトの中で条件つきコマンド実行を行なわせるのによく使われま
     す。例えば

     g/old/s//new/

     は、出現した文字列 old をすべて文字列 new に置き換えます。 u (undo) コマ
     ンドがグローバルコマンドリスト内で実行された場合、コマンドリストは 1 度だ
     けの実行になります。

     診断が無効にされていないと、 ed を終了しようとする場合やバッファ内のデー
     タを書き出さずに他のファイルを編集しようとする場合にエラーになります。そ
     の場合でも、同一のコマンドを 2 回入力すると、コマンドは成功します。しか
     し、それまでの未保存の編集結果は、すべて失われます。

ABELNET VPSサービス