aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man1/ed.1
blob: fc0d4eb6d5f939be539c4eaddf141296ab06bf4c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
.\"	%Id: ed.1,v 1.8.2.1 1997/10/12 08:09:12 jmg Exp %
.\" jpman %Id: ed.1,v 1.2 1997/06/09 15:03:56 jsakai Stab %
.TH ED 1 "21 May 1993"
.SH 名称
.\" ed, red \- text editor
ed \- 行指向のテキストエディタ
.SH 書式
ed [-] [-sx] [-p \fIstring\fR] [\fIfile\fR]
.\" .LP
.\" red [-] [-sx] [-p \fIstring\fR] [\fIfile\fR]
.SH 解説
.B ed
は、行指向のテキストエディタです。
本コマンドを用いることで、テキストファイルの生成、表示、変更その他の操作を
行なうことができます。
.\" .B red
.\" is a restricted
.\" .BR ed :
.\" it can only edit files in the current
.\" directory and cannot execute shell commands.

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

編集は、
.I コマンド
モードと
.I 入力
モードの 2 つの異なるモードを使い分けて行ないます。
.B ed
を起動したら、まずコマンドモードに入ります。
本モードでは、標準入力からコマンドを読み込み、それを実行することで
エディタバッファの内容操作を行ないます。
典型的なコマンドは、以下のようなものです。
.sp
.RS
,s/\fIold\fR/\fInew\fR/g
.RE
.sp
これは、編集しているテキストファイル中に
.I old
という文字列があったら、これらをすべて文字列
.IR new
に置き換えるコマンドです。

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

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

一般的には、
.B ed
コマンドは、0 個以上の行番号および、それに連なる 1 文字コマンドから
成り立ちます。場合によっては追加のパラメータをもつこともあります。
いうなれば、コマンドは以下の構造を持ちます。
.sp
.RS
.I [address [,address]]command[parameters]
.RE
.sp
行番号はコマンドの操作対象行あるいは対象行範囲を示します。
行番号の指定個数が、コマンドが受け付け可能な個数よりも少ない場合には、
デフォルトの行番号が採用されます。

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

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

.TP 8
.RI \-p \ string
コマンドプロンプトとして表示する文字列を指定します。
コマンドプロンプトは、コマンドモードで
.I `P'
コマンドを実行することで、表示する/しないを切り替えることが可能です。

.TP 8
.I file
編集対象のファイルを指定します。
.I file
名の先頭に感嘆符 (!) が付加されていた場合、そのファイル名はシェルコマンドと
して解釈されます。この場合、編集対象のテキストは、
.I file
で指定したコマンドを実行した結果、標準出力に出力されるデータです。
先頭が感嘆符で始まるファイルを編集する場合には、ファイル名の先頭に
バックスラッシュ (\\) を付加して下さい。
感嘆符以外の文字で始まるファイル名については、編集対象のファイル名は
.I file
となります。

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

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

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

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

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


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

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

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

.TP 8
n
The
バッファ内の
.IR n 
行目を表します。
.I n
は、
.I [0,$]
の間です。

.TP 8
- or ^
1 行前の行です。
相対行指定
.I -1
と同等であり、複数指定することで効果を累積することが可能です。
.\" --- という指定をすることで、2 行前を示すことができます。
.\" ↑原文中に無いのでコメントアウト  sakai@jp.freebsd.org (Jun 9,1997)

.TP 8
-\fIn\fR or ^\fIn\fR
.IR n 
行前の行を表します。
.I n
は、負でない整数です。

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

.TP 8
+\fIn\fR or whitespace\fIn\fR
.I n
行後ろの行を表します。
.I n
は、負でない整数です。
.I n
の前に
.I whitespace ( 空白文字 )
を付加して指定した場合も
.I +n
と解釈されます。
.\" ↓原文中に無いのでコメントアウト  sakai@jp.freebsd.org (Jun 9,1997)
.\" ただし、空白文字による指定を行なった場合は、単独では現在行からの相対行数を
.\" 指定することはできず、相対行指定の基準となる行をその前に指定しなければなり
.\" ません。

.TP 8
, \fRor\fB %
バッファの最初から最後までを表します。これは、
.I 1,$
と指定した場合と同等です。

.TP 8
;
バッファ中の現在行から最後の行までを表します。これは、
.I .,$
と指定した場合と同等です。

.TP 8
.RI / re/
指定された正規表現
.IR re
を含む、(現在行よりも後ろの) 次の行を表します。
必要であれば、文字列検索はテキスト先頭に折り返し、
現在行に達するまで検索を行ないます。
// は、最後に行なった検索を繰り返します。

.TP 8
.RI ? re?
The
指定した正規表現
.I re
を含む、現在行より前の行を表します。
必要であれば、文字列検索はテキストの最後に折り返し、
現在行に達するまで検索を行ないます。
?? は、最後に行なった検索を繰り返します。

.TP 8
.RI \' lc
.I `k'
(mark)  コマンドでマークをつけた行を表します。
.I lc
は、英小文字です。

.SS 正規表現
正規表現はテキストを選択する際に用いるパターンです。
例えば次の
.B ed
コマンド
.sp
.RS
g/\fIstring\fR/
.RE
.sp
は
.IR string
を含む全ての行を表示します。
正規表現は
.I `s'
コマンドで古いテキストを新しいテキストで置き換える際にも用いられます。

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

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

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

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

.TP 8
\fR.\fR
任意の一文字にマッチします。

.TP 8
.I [char-class]
文字クラス
.IR char-class
に含まれる任意の一文字にマッチします。
文字クラス
.IR char-class
に `]' を含めるには、文字 `]' を最初の文字に指定します。
文字の範囲を指定するには、範囲の最後の文字との間を `-' でつなぎます。
例えば `a-z' は小文字全体を表します。
以下のようなリテラル表記も、文字集合を指定するために文字クラス
.I char-class
で使用することができます:
.sp
\ \ [:alnum:]\ \ [:cntrl:]\ \ [:lower:]\ \ [:space:]
.PD 0
\ \ [:alpha:]\ \ [:digit:]\ \ [:print:]\ \ [:upper:]
.PD 0
\ \ [:blank:]\ \ [:graph:]\ \ [:punct:]\ \ [:xdigit:]
.sp
文字クラス
.IR char-class
の最初あるいは最後の文字として `-' が用いられると、
それはその文字自身にマッチします。
文字クラス
.I char-class
中のこれ以外の文字は全て、それら自身にマッチします。
.sp
以下の形式の文字クラス中のパターン:
.sp
\ \ [.\fIcol-elm\fR.] or,
.PD 0
\ \ [=\fIcol-elm\fR=]
.sp
は
.IR locale (5)
に沿って解釈されます (現在のところサポートされません)。ここで
.I col-elm
は
.I collating element
です。詳しい説明は
.IR regex (3)
を参照して下さい。

.TP 8
[^\fIchar-class\fR]
文字クラス
.IR char-class
に含まれない、改行以外の任意の一文字にマッチします。
文字クラス
.IR char-class
は上で定義しています。

.TP 8
^
`^' が正規表現の最初の文字である場合、
その正規表現は行頭でのみマッチします。
それ以外の場合、`^' はそれ自身にマッチします。

.TP 8
$
`$' が正規表現の最後の文字である場合、
その正規表現は行末でのみマッチします。
それ以外の場合、`$' はそれ自身にマッチします。

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

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

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

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

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

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

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

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

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

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

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

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

.TP 8
(.,.)d
指定した範囲をバッファから削除します。
削除した範囲の後に行が続いている場合、現在行番号は、その行に設定されます。
そうでない場合には、現在行番号は、削除された範囲の前の行に設定されます。

.TP 8
.RI e \ file
.I file
を編集し、デフォルトのファイル名を設定します。
もし
.I file
が指定されなかった場合には、デフォルトのファイル名が使用されます。
本コマンド実行時に、それまで別のファイルを編集していた場合には、
その内容はすべて消去され、新しいファイルが読み込まれます。
現在行番号は、入力された最後の行に設定されます。

.TP 8
.RI e \ !command
command で指定されたコマンドを実行し、その結果として標準出力へ
出力されたデータを編集します (後述する
.RI ! command
を参照して下さい)。
デフォルトのファイル名は変更されません。
本コマンド実行時に、それまで別のファイルを編集していた場合には、
その内容はすべて消去され、標準出力へ出力されたデータが読み込まれます。
現在行番号は、入力された最後の行に設定されます。

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

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

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

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

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

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

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

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

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

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

.TP 8
.RI (.)k lc
行に、英小文字
.I lc
で指定したマークをつけます。
その後、マークをつけられた行は、コマンド中で
.I 'lc
(つまり、シングルクォートと
.I lc
) として指定できるようになります。
マークは、その行が削除されるかもしくは変更されるかしない限り、消えることは
ありません。

.TP 8
(.,.)l
指定した範囲の行の内容を見やすく表示します。
もし 1 つの行が 1 画面以上を占める場合 ( 例えばバイナリファイルを見ている
場合など ) 
`--More--' プロンプトが最下行に表示されます。
次の画面を表示する前に
.B ed
はリターンキーが入力されるまで待ちます。
現在行番号は、表示された最後の行に設定されます。

.TP 8
(.,.)m(.)
指定した範囲の行をバッファ内で移動します。指定した行は、
コマンドの右辺で指定した行の後ろに
移動されます。移動先の行としては、
.IR 0
 (ゼロ) が指定可能です。
現在行番号は、移動された最後の行に設定されます。

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

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

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

.TP 8
q
ed を終了します。

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

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

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

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

.I re
および
.I replacement
は、スペースおよび改行を除くすべてのキャラクタを用いて区切ることが
可能です (後述する 
.I `s'
コマンドを見て下さい)。
最後のデリミタのうち 1 つか 2 つが省略された場合、
最後に文字列置換が発生した行は、
.I `p'
コマンドが指定された場合と同様に表示されます。

.I replacement
中のエスケープされていない `&' は、一致した文字列と置き換えられます。
キャラクタシーケンス
\fI`\em'\fR(
.I m
は [1,9] の範囲の整数です ) は、一致した文字列の
.IR m 
番目の後方参照で置き換えられます。
.I replacement
の中に入る文字が `%' のみだった場合、
最後に行なった置換の
.I replacement
が使用されます。
改行を
.I replacement
に指定したい場合は、バックスラッシュを用いてエスケープすれば可能です。

.TP 8
(.,.)s
最後の置換を繰り返します。
この形式の
.I `s'
コマンドは、回数を示すサフィックス
.I `n'
もしくは、他の
.IR `r' 、
.IR `g' 、
.I `p' 
のどのキャラクタとの組合せも可能です。
.I `n'
が指定されると、
.I n
回目に一致した文字列だけが置換されます。
.I `r'
サフィックスが指定されると、最後の置換が発生した文字列の変わりに、
最後に指定した正規表現が使用されます。
.I `g'
サフィックスは、最後の置換で用いたグローバルサフィックスの使用の
有効/無効を切り替えます。
.I `p'
サフィックスは、最後の置換に指定されたプリントサフィックスを反転します。
現在行番号は、最後に置換が発生した行に設定されます。

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

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

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

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

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

.TP 8
.RI (1,$)wq \ file
指定した範囲の行を
.IR file
で指定したファイルに書き出し、
.I `q'
コマンドを実行します。

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

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

.TP 8
x
以降の読み書きで用いられる暗号化鍵の入力を促します。
改行のみが入力されると、暗号化は解除されます。
それ以外の場合、キー読み込み中のエコーは抑制されます。
暗号化および復号化は bdes(1) アルゴリズムを用いて行われます。

.TP 8
.RI (.+1)z n
指定した行から一度に
.I n
行だけスクロールします。
.I n
が指定されない場合には、現在のウィンドウサイズだけスクロールします。
現在行番号は、最後に表示した行の行番号に設定されます。

.TP 8
.RI ! command
.I command
で指定したコマンドを、
.IR sh (1)
経由で実行します。
.I command
の最初の文字が `!'の場合には、その文字は直前に
.I `!command'
で実行したコマンド文字列が格納されます。
.I command
文字列をバックスラッシュ(\\)でエスケープした場合には、
.B ed
は処理を行ないません。
しかし、エスケープされない
.I `%'
文字があった場合には、その文字列はデフォルトファイル名に置き換えられます。
シェルがコマンド実行から戻ってきた場合には、`!' が標準出力に出力されます。
現在行番号は変更されません。

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

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

.SH 関連ファイル
.TP 20
/tmp/ed.*
バッファファイル
.PD 0
.TP 20
ed.hup
端末がハングアップした場合に、
.B ed
がバッファ内容を書き出すファイル

.SH 関連項目

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

USD:12-13

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

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

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

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

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

.I `g'
(global) コマンドは、検索や置換が失敗したというエラーを隠蔽します。
そのため、スクリプトの中で条件つきコマンド実行を行なわせるのによく使われます。
例えば
.sp
.RS
g/\fIold\fR/s//\fInew\fR/
.RE
.sp
は、出現した文字列
.I old
をすべて文字列
.I new
に置き換えます。
.I `u'
(undo) コマンドがグローバルコマンドリスト内で実行された場合、コマンドリストは
1 度だけの実行になります。

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