other versions
ED(1) | General Commands Manual | ED(1) |
名前¶
ed, red - 行指向のテキストエディタ書式¶
ed [-GVhs] [-p string] [file] red [-GVhs] [-p string] [file]説明¶
ed は、行指向のテキストエディタです。本コマンドを用いることで、 テキストファイルの生成、表示、変更その他の操作を行なうことができます。 red は制限付きの ed です。 red では、カレントディレクトリの ファイルのみを編集でき、シェルコマンドの実行はできません。,s/old/new/g
[address
[,address]]command[parameters]
オプション¶
- -G
- 強制的に後方互換性を有効にします。コマンド `G', `V', `f', `l', `m', `t', and `!!' に影響があります。
- -s
- 診断メッセージを抑制します。本オプションは、
ed
の入力がスクリプトによって行なわれる場合に有効です。
- -p string
- コマンドプロンプトとして表示する文字列を指定します。
コマンドプロンプトは、コマンドモードで
`P'
コマンドを実行することで、
表示する/しないを切り替えることが可能です。
- file
- 編集対象のファイルを指定します。ファイル名の先頭に感嘆符
(!) が付加され
ていた場合、そのファイル名はシェルコマンドとして解釈されます。この場合、
編集対象として読み込まれるテキストは、
sh(1) が file で指定した
コマンドを実行した結果、標準出力に出力されるデータです。先頭が感嘆符で
始まるファイルを編集する場合には、ファイル名の先頭にバックスラッシュ
(\)
を付加して下さい。感嘆符以外の文字で始まるファイル名については、
編集対象のファイル名は
file となります。
行指定¶
行は、バッファ内の行番号で表現されます。 ed は 現在行 を管理して おり、コマンドに行番号が指定されない場合は、現在行がデフォルト行として 用いられます。ファイルが最初に読み出された直後は、現在行はファイルの 最後の行となります。一般的に、現在行はコマンドが操作した最後の行と なります。- .
- バッファ中の現在行を表します。
- $
- バッファ中の最終行を表します。
- n
- バッファ内の n
番目の行を表します。
n は [0,$] の間です。
- -
- 1
行前の行です。相対行指定
-1 と同等であり、
複数指定することで効果を累積することが可能です。
- ^n
- n
行前の行を表します。
n
は、負でない整数です。
- +
- 次の行を表します。
これは、 +1
と同様であり、 -
と同様の累積的指定が可能です。
whitespace
n
- +n
- n
行後ろの行を表します。
n
は、負でない整数です。
n の前に whitespace
(空白文字)
を付加して指定した場合も
+n と解釈されます。
- ,
- バッファの最初から最後までを表します。
これは 1,$
と指定した場合と同等です。
- ;
- バッファ中の現在行から最後の行までを表します。これは、
.,$
と指定した場合と同等です。
- /re/
- 指定された正規表現
re
を含む、(現在行よりも後ろの)
次の行を表します。
必要であれば、文字列検索はテキスト先頭に折り返し、現在行に達するまで
検索を行ないます。
//
は、最後に行なった検索を繰り返します。
- ?re?
- 指定した正規表現
re
を含む、現在行より前の行を表します。
必要であれば、文字列検索はテキストの最後に折り返し、
現在行に達するまで検索を行ないます。
??
は、最後に行なった検索を繰り返します。
- 'lc
- `k' (mark)
コマンドでマークをつけた行を表します。
ここで lc
は英小文字 1
文字です。
正規表現¶
正規表現はテキストを選択する際に用いるパターンです。 例えば次の ed コマンドg/string/
- 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
に含まれない、改行以外の任意の一文字に
マッチします。文字クラス
char-class
は上で定義しています。
- ^
- `^'
が正規表現の最初の文字である場合、その正規表現は行頭でのみ
マッチします。それ以外の場合、
`^'
はそれ自身にマッチします。
- $
- `$'
が正規表現の最後の文字である場合、その正規表現は行末でのみ
マッチします。それ以外の場合、
`$'
はそれ自身にマッチします。
- \(re\)
- 部分式 (subexpression) re
を定義します。部分式はネストできます。
これ以降、 `\ n'
の形式の後方参照は、
n
番目の部分式にマッチしたテキストに展開されます
( n は [1,9]
の範囲の数)。
例えば、正規表現
`\(a.c\)\1' は、
同じ文字列が隣接しているような任意の文字列にマッチします。
部分式は左側のデリミタから順に番号が振られます。
- *
- 直前にある単一文字の正規表現あるいはその部分式のゼロ回以上の繰り返しに
マッチします。 *
が正規表現あるいはその部分式の最初の文字として用い
られた場合、 *
はその文字自身にマッチします。
* 演算子は時に予期
しない結果をもたらすことがあります。例えば、正規表現
`b*' は文字列 `abbb'
の先頭にマッチします
(部分文字列 `bbb'
ではありません)。これは
ヌルへのマッチが最も左にあるマッチだからです。
\{n,m\}
\{n,\}
- \{n\}
- 直前にある単一文字の正規表現あるいはその部分式の、
n 回以上 m 回
以下の繰り返しにマッチします。
m
が省略された場合、
n 回以上の繰り
返しにマッチします。さらにコンマも省略された場合、ちょうど
n 回の
繰り返しにのみマッチします。この表現が正規表現や部分式の先頭に登場した
場合は、リテラルとして解釈されます
(すなわち、正規表現
`\{2\}' は 文字列 `{2}'
などにマッチします。
\<
- \>
- これに続く単一文字の正規表現あるいはその部分式が、
ワード の先頭 (\<)
や末尾 (\>)
でのみマッチするようにします。
ワード とは ASCII
で英数字文字が続く文字列で最長のものです
(アンダースコア (_)
も文字列に含まれます)。
\`
- \´
- 無条件に、行の先頭
(\`) や行の末尾 (\´)
にマッチします。
- \?
- 1
文字の正規表現か直前の部分式が
0 個か 1
個ある場合にマッチします。
例えば、正規表現
`a[bd]\?c' は、文字列 `abc', `adc', `ac'
に マッチします。 \?
が正規表現か部分式の先頭に登場した場合は、
リテラル `?'
にマッチします。
- \+
- 1
文字の正規表現または直前の部分式の
1
回以上の繰り返しにマッチします。
正規表現 `a\+' は `aa*'
の短い書き方です。
\+
が正規表現や部分式の
先頭に登場した場合は、リテラル
`+' にマッチします。
- \b
- ワードの先頭や末尾にマッチします
(マッチするのは空文字列です)。
正規表現 `\bhello\b' は `\<hello\>'
と同じです。 但し、
`\b\b'
は有効な正規表現ですが、
`\<\>'
はそうではありません。
- \B
- ワード内にマッチします
(マッチするのは空文字列です)。
- \w
- ワードを構成する任意の文字にマッチします。
- \W
- ワードを構成する文字以外の任意の文字にマッチします。
コマンド¶
全ての ed コマンドは、1 文字からなりますが、追加パラメータが必要な コマンドもあります。コマンドのパラメータが複数の行にわたる場合には、 そのパラメータを含めたコマンドの終りを含む行を除き、行末に バックスラッシュ (\) を付加して下さい。- (.)a
- 指定した行の後にテキストを追加します。行番号
0 (ゼロ)
も指定できます。
テキストは入力モードで入力されていきます。
現在行番号は、入力された最後の行に設定されます。
- (.,.)c
- バッファ内の指定した行を変更します。指定した行のデータは、バッファから
消去され、そこに対してテキストデータを入力するようになります。テキスト
は入力モードで入力されていきます。現在行番号は、入力した最後の行に設定
されます。
- (.,.)d
- 指定した範囲をバッファから削除します。削除した範囲の後に行が続いている
場合、現在行番号は、その行に設定されます。そうでない場合には、現在行番
号は、削除された範囲の前の行に設定されます。
- e file
- file
を編集し、デフォルトのファイル名を設定します。もし
file が
指定されなかった場合には、デフォルトのファイル名が使用されます。
本コマンド実行時に、それまで別のファイルを編集していた場合には、
その内容はすべて消去され、新しいファイルが読み込まれます。
現在行番号は、入力された最後の行に設定されます。
- e !command
- !command
で指定されたコマンドを実行し、その結果として標準出力へ出力
されたデータを編集します
(後述する !command
を参照して下さい)。
デフォルトのファイル名は変更されません。
command
の出力が読み込まれる
前に、バッファ内に存在した行はすべて消去されます。現在行番号は、入力さ
れた最後の行に設定されます。
- E file
- 無条件で file
で指定したファイルを読み込み、編集します。
e
コマンドと動作は似ていますが、すでにバッファ上のデータに変更が
加えられている場合でも、未書き込みの変更を警告を出さずに捨ててしまう
点が異なります。現在行番号は、入力された最後の行に設定されます。
- f file
- デフォルトファイル名を
file に設定します。
file
名が指定されない
場合には、デフォルトファイル名が表示されます。
- (1,$)g/re/command-list
- command-list
で指定されたコマンドを、指定した正規表現
re に一致
する各行に対して実行します。現在行番号は、
command-list で指定された
コマンドが実行される前に、指定した正規表現に一致した行に設定されます。
`g'
コマンドが終了した場合、現在行番号は最後に
command-list 実行
の影響を受けた行に設定されます。
- (1,$)G/re/
- 指定した正規表現
re
に一致した行に対して、対話編集を行ないます。
指定した正規表現に一致する文字列を含む行があると、その行を表示し、
現在行番号を設定します。そして、ユーザに
command-list の入力を
促します。 `G'
コマンドが終了した場合、現在行番号は、
command-list
実行の影響を受けた最後の行に設定されます。
- H
- エラーメッセージの出力の有無を切り替えます。デフォルトでは、
エラーメッセージは出力されません。ed
スクリプトを作成する場合、
スクリプトのデバッグのために、本コマンドを最初に実行することを
おすすめします。
- h
- 最後に表示されたエラーメッセージを表示します。
- (.)i
- 編集バッファ中の現在行の前に、テキストを挿入します。
テキストは入力モードで入力されていきます。
現在行番号は、入力された最後の行に設定されます。
- (.,.+1)j
- 指定した範囲の行を
1
行に連結します。指定した行はバッファから削除され、
その行の内容を含む 1
行に置き換えられます。
現在行番号は、置き換えられた行に設定されます。
- (.)klc
- 行に、英小文字
lc
で指定したマークをつけます。
その後、マークをつけられた行は、コマンド中で
'lc (つまり、
シングルクォートと小文字
lc)
として指定できるようになります。
マークは、その行が削除されるかもしくは変更されるかしない限り、
消えることはありません。
- (.,.)l
- 指定した範囲の行の内容を見やすく表示します。
端末から起動された場合、各ページの終わりで表示を一時停止し、
改行が入力されるまで待ちます。
現在行番号は、表示された最後の行に設定されます。
- (.,.)m(.)
- 指定した範囲の行をバッファ内で移動します。指定した行は、コマンドの右辺
で指定した行の後ろに移動されます。移動先の行としては、
0 (ゼロ) が
指定可能です。現在行番号は、移動された最後の行の移動後の行に設定
されます。
- (.,.)n
- 指定した行の内容を、行番号つきで表示します。
現在行番号は、表示された最後の行に設定されます。
- (.,.)p
- 指定した範囲の行の内容を表示します。
端末から起動された場合、
ed
は各ページの終わりで表示を一時停止し、
改行が入力されるまで待ちます。
現在行番号は、表示された最後の行に設定されます。
- P
- コマンドプロンプト表示の有無を切り替えます。コマンド起動時のオプション
-p string
でプロンプトが指定されていなければ、コマンドプロンプトの
表示はデフォルトでオフになっています。
- q
- ed
を終了します。
- Q
- 無条件に ed
を終了します。このコマンドは
q
コマンドと似ていますが、
まだファイルに書き出されていない変更があっても警告せずに終了する点が
異なります。
- ($)r file
- file
で指定されたファイルを、指定した行の後ろに読み込みます。
file
が指定されない場合、デフォルトのファイル名が読み込みに使用され
ます。このコマンドに先だってデフォルトのファイル名が設定されていない場
合、デフォルトのファイル名には、
file
で指定されたものが設定されます。
それ以外の場合、デフォルトのファイル名は変更されません。現在行番号は、
読み込まれたファイルの最後の行に設定されます。
- ($)r !command
- command
で指定されたコマンドを実行し、その結果として標準出力へ出力
されたデータを指定した行の後ろに読み込みます
(後述する ! command を
参照して下さい)。デフォルトのファイル名は変更されません。現在行番号は、
読み込まれた最後の行の行番号に設定されます。
(.,.)s/re/replacement/
(.,.)s/re/replacement/g
(.,.)s/re/replacement/n
指定した行のテキスト中の、正規表現
re
に一致する文字列を、文字列
replacement
に置き換えます。デフォルトでは、それぞれの行で最初に一致
した文字列のみを置き換えます。
`g' (global)
サフィックスが指定された
場合、一致した文字列はすべて置き換えられます。
`n' サフィックス ( `n'
は正の整数)
が指定された場合、
`n'
回目に一致した文字列だけ
を置き換えます。指定した範囲で一度も文字列の置換が起こらなかった場合、
エラーとみなされます。現在行番号は、最後に置換が発生した行に設定
されます。
re および replacement
は、スペース、改行、
下記の `s' コマンド
で使用されるキャラクタ以外のすべてのキャラクタを用いて区切ることが可能
です。最後のデリミタのうち
1 つか 2
つが省略された場合、最後に文字列
置換が発生した行は、
`p'
コマンドが指定された場合と同様に表示されま
す。
replacement
中のエスケープされていない
`&'
は、一致した文字列と置き
換えられます。キャラクタシーケンス
`\m' (`m' は [1,9] の範囲の
整数です)
は、一致した文字列の
`m'
番目の後方参照で置き換えられます。
replacement
の中に入る文字が `%'
のみだった場合、最後に行なった置換
の replacement
が使用されます。改行を
replacement に指定したい
場合は、バックスラッシュを用いてエスケープすれば可能です。
- (.,.)s
- 最後の置換を繰り返します。この形式の
`s'
コマンドには、回数を示す
サフィックス `n'
と、文字 `r', `g', `p'
の任意の
組み合わせを指定できます。
`n'
が指定されると、
`n' 回目に一致し
た文字列だけが置換されます。
`r'
サフィックスが指定されると、最後の
置換が発生した文字列の変わりに、最後に指定した正規表現が使用されます。
`g'
サフィックスは、最後の置換で用いたグローバルサフィックスの使用の
有効/無効を切り替えます。
`p'
サフィックスは、最後の置換に指定された
プリントサフィックスを反転します。現在行番号は、最後に置換が発生した行
に設定されます。
- (.,.)t(.)
- 指定した範囲の行を、コマンド文字の右辺に指定した行番号の後に
コピー (つまり転送)
します。コピー先の行番号としては、
`0' (ゼロ)
の指定が許されています。
現在行番号は、コピーした一番最後の行の行番号に設定されます。
- u
- 最後に実行したコマンドの実行結果を取り消し、現在行番号を、取り消したい
コマンドが実行される前のものに戻します。グローバルコマンドである
`g', `G', `v', `V'
については、その改変は
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
- カットバッファの内容を指定された行の後ろにコピー
(挿入) します。
現在行番号は最後にコピーが行われた行になります。
- (.,.)y
- 指定した範囲の行の内容をカットバッファにコピー
(yank) します。
カットバッファの内容は、これ以降にコマンド
`y', `s', `j', `d', `c'
を実行すると上書きされます。
現在行番号は変更されません。
- (.+1)zn
- 指定した行から一度に
n
行だけスクロールします。
n が指定されない
場合には、現在のウィンドウサイズだけスクロールします。現在行番号は、
最後に表示した行の行番号に設定されます。
- !command
- command
で指定したコマンドを、
sh(1)
を用いて実行します。
command の最初の文字が
`!'の場合には、その文字は直前に
!command
で実行したコマンド文字列が格納されます。
command
文字列をバックスラッ
シュ (\)
でエスケープした場合には、
ed
は処理を行ないません。しかし、
エスケープされない
`%'
文字があった場合には、その文字列はデフォルト
ファイル名に置き換えられます。シェルがコマンド実行から戻ってきた場合に
は、`!'
が標準出力に出力されます。現在行番号は変更されません。
- (.,.)#
- コメントを開始します。改行までの残りの行は無視されます。
行番号とその直後にセミコロンを指定した場合、
現在行番号は指定された行番号に設定されます。
それ以外の場合、現在行番号は変更されません。
- ($)=
- 指定された行の行番号を表示します。
- (.+1)newline
- 指定した行を表示します。そして、現在行番号を表示した行のものに
設定します。
ファイル¶
- ed.hup
- 端末が回線切断した場合に、
ed
がバッファ内容を書き出すファイル。
関連項目¶
vi(1), sed(1), regex(3), sh(1).制限¶
ed は file 引数に対してバックスラッシュエスケープ処理を施します。 つまり、ファイル名中でバックスラッシュ (\) を前につけた文字は、 リテラルとして解釈されます。診断¶
エラーが発生すると、 ed は `?' を表示し、コマンドモードに戻るか、 スクリプトによる実行のエラーの場合にはプログラムを終了します。最後の エラーメッセージについての説明は、 `h' (help) コマンドを用いることで 表示可能です。3 July 2010 |