ED(1) FreeBSD 一般コマンドマニュアル ED(1)
名称
ed, red − 行指向のテキストエディタ |
書式
ed [−] [−sx] [−p string] [file] |
red [−] [−sx] [−p string] [file] |
解説 |
ed ユーティリティは、行指向のテキストエディタです。本コマンドを用いること で、テキストファイルの生成、表示、変更その他の操作を行なうことができま す。 red として起動された場合、エディタは "制限" モードで動作します。唯一 の違いは、 ‘!’ (ed がシェルコマンドと解釈) で開始または ‘/’ を含むファイ ル名の使用を制限することです。カレントディレクトリ外の編集を妨げるのは、 ユーザがカレントディレクトリに対して書き込み権限が無い場合だけです。ユー ザがカレントディレクトリに対して書き込み権限がある場合、カレントディレク トリにシンボリックリンクを作成可能であり、シンボリックリンクが指すファイ ルをユーザが編集することを red は妨げません。 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 −p string file 行指定 |
行は、バッファ内の行番号で表現されます。 ed ユーティリティは 現在行を管理 しており、コマンドに行番号が指定されない場合は、現在行がデフォルト行とし て用いられます。ファイルが最初に読み出された直後は、現在行はファイルの最 後の行となります。一般的に、現在行はコマンドが操作した最後の行となりま す。 行番号は、以下の一覧のうち 1 つおよび、補助的に付加される相対行番号 (オフ セット) から構成されます。相対行番号は、任意の数字の組み合わせと演算子、 そして空白文字を含みます (例えば +, - や ^ が演算子に含まれます)。行番号 は、左から右に解釈され、それらの演算子を含む値は、現在行からの相対行番号 と解釈されます。 行番号の表現に関して上記の規則が適用される中で、行番号 0 (ゼロ) に関して は、例外的な扱いがされます。これは「最初の行より前」を意味し、それが正し い意味を持つ場合は常に利用可能です。 行範囲は、コンマもしくはセミコロンで区切られた 2 つのアドレスで示されま す。最初に指定される行番号は、2 番目に指定される行番号を超える値を指定し てはいけません。行範囲指定で行番号が 1 つしか指定されなかった場合には、2 番目に指定されるアドレスとして最初に指定されたアドレスが設定されます。こ こで 3 個以上の行番号が指定されると、最後の 2 つの行番号で決定される範囲 がコマンド実行対象になります。行番号の指定を 1 つだけしか想定していないコ マンドの場合、最後の 1 つの行番号の行がコマンド実行対象となります。 コンマで区切られた各行番号は、現在行からの相対行を指し示します。セミコロ ンで区切られている場合は、範囲の始めの行は現在行が設定され、範囲の終りは 始めの行からの相対行で表わされます。 行番号の指定には、以下のシンボルが使用可能です。 |
.
バッファ中の現在行を表します。 $ n - or ^ -n or ^n + +n , or % ; /re/ ?re? ’lc 正規表現 |
正規表現はテキストを選択する際に用いるパターンです。例えば次の 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 は collating element です。詳しい説明は regex(3) と re_format(7) を参照して下さい。 |
[^char-class]
文字クラス char-class に含まれない、改行以外の任意の一文字にマッ チします。文字クラス char-class は上で定義しています。 ^ $ \< \> \(re\) * \{n,m\} or \{n,\} or \{n\} 各 regex(3) の実装によっては、更に正規表現演算子がいくつか定義されている ことがあります。 コマンド |
全ての ed コマンドは、1 文字からなりますが、追加パラメータが必要なコマン ドもあります。コマンドのパラメータが複数の行にわたる場合には、そのパラ メータを含めたコマンドの終りを含む行を除き、行末にバックスラッシュ (\) を 付加して下さい。 一般的には、1 行ごとに 1 コマンドを入れることが許されています。しかしなが ら、ほとんどのコマンドは、コマンド実行を行なった後のデータ更新その他を確 認するために、 p (print)、や l (list)、 n (enumerate), のような表示系のコ マンドを同時に指定できます。 インタラプト (一般的には ^C) を入力することで、現在実行しているコマンドを 強制終了し、コマンドモードに戻すことができます。 ed ユーティリティは、以下のコマンドを使用できます。コマンド実行時に何の指 定もない場合のデフォルトの行番号もしくは行範囲が括弧内に示されています。 |
(.)a
指定した行の後にテキストを追加します。テキストは入力モードで入力 されていきます。現在行番号は、入力された最後の行に設定されます。 (.,.)c (.,.)d e file e !command E file f file (1,$)g/re/command-list command-list で指定されるコマンドは、1 行ごとに 1 つずつ書かれる 必要があります。各コマンド行の終りには、一番最後のコマンド行を除 いてはバックスラッシュ (\) を記述する必要があります。コマンド g, G, v, V を除くすべてのコマンドを指定可能です。 command-list 中の 空行は、 p コマンドと同等に扱われます。 (1,$)G/re/ command-list の記述形式は、 g コマンドで指定するものと同じです。 改行のみの場合は、コマンド実行をしない (ヌルコマンドリストを指定 した) ものとみなされます。 ‘&’ 文字のみを入力した場合には、直前に 実行した (ヌルコマンドリストではない) コマンドを再実行します。 H h (.)i (.,.+1)j (.)klc (.,.)l (.,.)m(.) (.,.)n (.,.)p P q Q ($)r file ($)r !command (.,.)s/re/replacement/ (.,.)s/re/replacement/g (.,.)s/re/replacement/n re および replacement は、スペースおよび改行を除くすべてのキャラ クタを用いて区切ることが可能です (後述する s コマンドを見て下さ い)。最後のデリミタのうち 1 つか 2 つが省略された場合、最後に文字 列置換が発生した行は、 p コマンドが指定された場合と同様に表示され ます。 replacement 中のエスケープされていない ‘&’ は、一致した文字列と置 き換えられます。キャラクタシーケンス \m (m は [1,9] の範囲の整数 です ) は、一致した文字列の m 番目の後方参照で置き換えられます。 replacement の中に入る文字が ‘%’ のみだった場合、最後に行なった置 換の replacement が使用されます。改行を replacement に指定したい 場合は、バックスラッシュを用いてエスケープすれば可能です。 (.,.)s (.,.)t(.) u (1,$)v/re/command-list (1,$)V/re/ (1,$)w file (1,$)wq file (1,$)w !command (1,$)W file x (.+1)zn !command ($)= (.+1)newline 関連ファイル |
/tmp/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.
制限
ed ユーティリティは、 file 引数に対してバックスラッシュエスケープ処理を施 します。つまり、ファイル名中でバックスラッシュ (\) を前につけた文字は、リ テラルとして解釈されます。 (バイナリではない) テキストファイルの最後が改行文字で終っていない場合、 ed はそれを読み書きする際に改行文字を追加します。バイナリファイルの場合 は、 ed はこのような改行文字追加は行いません。 1 行あたりのオーバヘッドは整数 4 つ分です。 |
診断
エラーが発生すると、 ed は ‘?’ を表示し、コマンドモードに戻るか、スクリプ トによる実行のエラーの場合にはプログラムを終了します。最後のエラーメッ セージについての説明は、 h (help) コマンドを用いることで表示可能です。 g (global) コマンドは、検索や置換が失敗したというエラーを隠蔽します。その ため、スクリプトの中で条件つきコマンド実行を行なわせるのによく使われま す。例えば g/old |
/s//new/ は、出現した文字列 old をすべて文字列 new に置き換えます。 u (undo) コマンドがグローバルコマンドリスト内で実行された場合、コマンドリストは 1 度だけの実行になります。 診断が無効にされていないと、 ed を終了しようとする場合やバッファ内のデータを書き出さずに他のファイルを編集しようとする場合にエラーになります。その場合でも、同一のコマンドを 2 回入力すると、コマンドは成功します。しかし、それまでの未保存の編集結果は、すべて失われます。
歴史
ed コマンドは Version 1 AT&T UNIX で登場しました。 |
バグ
ed ユーティリティは、マルチバイト文字を認識しません。 FreeBSD 10.0 July 3, 2004 FreeBSD 10.0 |