aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man1/sed.1
blob: 90c38dd47d181f52d0a8f930a59480dfb967f63b (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
.\" Copyright (c) 1992, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" This code is derived from software contributed to Berkeley by
.\" the Institute of Electrical and Electronics Engineers, Inc.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"	@(#)sed.1	8.2 (Berkeley) 12/30/93
.\" %FreeBSD: src/usr.bin/sed/sed.1,v 1.9.2.9 2002/06/27 13:03:33 jmallett Exp %
.\" $FreeBSD$
.\"
.Dd May 7, 2002
.Dt SED 1
.Os
.Sh 名称
.Nm sed
.Nd ストリームエディタ
.Sh 書式
.Nm
.Op Fl Ean
.Ar command
.Op Ar
.Nm
.Op Fl Ean
.Op Fl e Ar command
.Op Fl f Ar command_file
.Op Fl i Ar extension
.Op Ar
.Sh 解説
.Nm
は、指定されたファイル、ファイルが指定されていないときは標準入力を読み込み、
指定されたコマンドリストに従って入力に変更を加え、変更結果を標準出力に書き
出します。
.Pp
.Nm
への第一引数として単一のコマンドを指定することができます。複数のコマンドを指定するときは、
.Fl e
または
.Fl f
オプションで行います。どちらの場合でも、入力に対して指定されたコマンドを、
指定された順序で実行します。
.Pp
オプションは以下のとおりです。
.Bl -tag -width indent
.It Fl E
正規表現を、Basic Regular expression (BRE) ではなく、
拡張 (モダン) 正規表現として解釈します。
.Xr re_format 7
マニュアルページは、どちらの書式も完全に記述しています。
.It Fl a
通常、
.Dq w
関数の引数となるファイルは、処理に先立って空のファイルとして作成されます。
.Fl a
オプションを指定することにより、
.Dq w
関数が入力に対して適用されるときまで、
ファイルの作成が遅延されます。
.It Fl e Ar command
編集コマンド
.Ar command
をコマンドリストに追加します。
.It Fl f Ar command_file
ファイル
.Ar command_file
に記述されたコマンドをコマンドリストに追加します。
編集コマンドは 1 行ごとに記述します。
.It Fl i Ar extension
ファイルをその場で編集し、指定した
.Ar extension
のバックアップを保存します。
長さ 0 の
.Ar extension
が指定された場合、バックアップは保存されません。
その場で編集するときに、長さ 0 の
.Ar extension
を指定することは勧められません。
ディスク空間が尽きてしまったときなどに、
ファイルが壊れたり内容が一部だけになってしまうことがあるからです。
.It Fl n
デフォルトでは、入力行は、すべてのコマンドを適用した後に標準出力に書
き出されます。
.Fl n
オプションはこの動作を禁止し、明示的な出力コマンド
(
.Dq p
等)が適用された入力のみを出力します。
.El
.Pp
.Nm
のコマンドは以下の形式です。
.Pp
.Dl [address[,address]]function[arguments]
.Pp
最初の address の前と function の前に空白を置くことができます。
.Pp
通常
.Nm
は、入力ファイルの各行を改行コードを含めずに
.Em "パターンスペース"
にコピーし(
.Dq D
関数の後でパターンスペースになにか残っている場合を除きます)、
順にコピーされた内容に適応する address 指定を持つコマンドを
適用し、パターンスペースの内容を改行を付与して標準出力へ書き出し、
パターンスペースを消去するという動作を繰り返します。
.Pp
いくつかの関数は、パターンスペースの一部または全部を保持できる
.Em "ホールドスペース"
を利用します。ホールドスペースの内容は、以降の処理に用いることができ
ます。
.Sh "sed の address 表記"
address の指定は必須ではありません。address は行番号 (複数の入力ファイ
ルに対しては通し番号を用います)、入力の最後の行を示すドル記号
.Pq Dq $
、コンテキストアドレス (区切り記号にはさまれた正規表現) のいずれかです。
.Pp
address 指定を持たないコマンドは、すべてのパターンスペースを選択します。
.Pp
1つの address 指定を持つコマンドは、その address 指定にマッチする
すべてのパターンスペースを選択します。
.Pp
2 つの address 指定を持つコマンドは、address の両端を含んだ範囲を
選択します。
この範囲は、1 つめの address にマッチしたパターンスペースで始まり、
その後に続く 2 つめの address にマッチしたパターンスペースで終わります。
2 つめの address が、1 つめの address で選択された行番号以下の
番号である場合、1 つめの address が指定する行のみ選択されます。
2 つめの address がコンテキストアドレスである場合、sed は、
1 つめの address にマッチしたパターンスペースを 2 つめの
address に再びマッチさせようとはしません。sed は、選択された範囲の
次の行から、1 つめの address にマッチする行の検索を
再開します。
.Pp
エクスクラメーション関数
.Pq Dq \&!
を用いることにより、address
で選択されていない範囲に編集コマンドを適用させることもできます。
.Sh "sed の正規表現"
.Nm
で使われる正規表現は、デフォルトでは Basic Regular expression (BRE
.Xr re_format 7
を参照) です。
.Nm
は、
.Fl E
フラグを指定されると、拡張 (モダン) 正規表現を使用可能です。
正規表現に加え、
.Nm
では以下の拡張がなされています。
.Pp
.Bl -enum -compact
.It
コンテキストアドレスにおいて、バックスラッシュ
.Pq Dq \e
と改行以外の文字を正規表現の区
切りとして用いることできます。区切り文字の直前にバックスラッシュを置く
ことで、区切り文字をリテラルに解釈させることができます。たとえば、コンテキ
ストアドレス \exabc\exdefx において、区切り文字は
.Dq x
で、2つめの
.Dq x
は
.Dq x
という文字を表します。よって、正規表現は
.Dq abcxdef
と解釈されま
す。
.Pp
.It
エスケープシーケンス \en は、パターンスペースに埋め込まれた改行にマッチします。
しかし、address と置換コマンド中にリテラルな改行を含めること
はできません。
.El
.Pp
.Nm
の正規表現には、デフォルト値の機能があります。
もし、正規表現が空、すなわち、区切りのみが指定されたなら、直前に用いられた正規表
現が用いられます。直前の正規表現とは、最後に使われた address または置換
コマンド中の正規表現です。最後とは実行時の順番であり、指定さ
れたコマンドの並びとは異なります。たとえば、
.Dq /abc/s//XXX/
はパターン
.Dq abc
を
.Dq XXX
で置換します。
.Sh "sed の関数"
以下のコマンドの一覧では、指定可能な最大 address 数を、[0addr]、
[1addr]、[2addrs] と表記しています。これらは、それぞれ最大 0、1、2 個
の address を指定することができることを意味します。
.Pp
.Em text
引数のテキストは複数行に渡ることができます。改行の直前にバックスラッシュ
を置くことで、テキストに改行を含めることができます。その他のバックスラッ
シュは取り除かれ、直後の文字がリテラルに解釈されます。
.Pp
.Dq r
と
.Dq w
関数は、オプショナルなファイル名引数をとります。ファイル名は、
関数名のあとに空白を置いてから指定する必要があります。引数として指定され
たファイルは、入力ファイルの処理を開始する前に作成(または、内容を消去)し
ます。
.Pp
.Dq b ,
.Dq r ,
.Dq s ,
.Dq t ,
.Dq w ,
.Dq y ,
.Dq \&! ,
.Dq \&:
関数は、オプショナルな引数をとることが
できます。以下の一覧に、どの引数が関数名のあとに空白を置いてから指定し
なければならないかが記述してあります。
.Pp
2つの関数は引数として関数リストをとります。関数リストは、以下の形式の
改行で区切られた
.Nm
関数の羅列です。
.Bd -literal -offset indent
{ function
  function
  ...
  function
}
.Ed
.Pp
.Dq {
の前後に空白を置くことができます。関数の前に空白を置くことができま
す。最後の
.Dq }
は、改行の直後に置く必要があります。
.Dq }
の直前に空白を置
くこともできます。
.Pp
.Bl -tag -width "XXXXXX" -compact
.It [2addr] function-list
選択されたパターンスペースに関数リストを適用します。
.Pp
.It [1addr]a\e
.It text
次の入力行を読み込む直前に
.Em text
を標準出力に書き出します。
これは
.Dq N
関数によって実行される場合でも新しい繰り返しの開始時であっても変わりません。
.Pp
.It [2addr]b[label]
指定された label を持つ
.Dq \&:
関数に分岐します。label が指定さ
れていない場合は、スクリプトの最後に分岐します。
.Pp
.It [2addr]c\e
.It text
パターンスペースを削除します。address が指定されていない場合と、1つだけ
指定された場合は
.Em text
が標準出力に書き出されます。2つの address が
指定された場合は、選択された範囲の最終行を処理した後に、text が標準出力に書き出されま
す。
.Pp
.It [2addr]d
パターンスペースを削除し、次の繰り返しを開始します。
.Pp
.It [2addr]D
パターンスペースの最初の改行までの部分を削除し、次の繰り返しを開始します。
.Pp
.It [2addr]g
ホールドスペースの内容をパターンスペースにコピーします。
.Pp
.It [2addr]G
改行文字とホールドスペースの内容をパターンスペースに追加します。
.Pp
.It [2addr]h
パターンスペースの内容をホールドスペースにコピーします。
.Pp
.It [2addr]H
改行文字とパターンスペースの内容をホールドスペースに追加します。
.Pp
.It [1addr]i\e
.It text
標準出力に
.Em text
を書き出します。
.Pp
.It [2addr]l
パターンスペースの内容を読めるような以下の形式で出力します。
.Pp
.Bl -tag -width "carriage-returnXX" -offset indent -compact
.It backslash
\e\e
.It alert
\ea
.It form-feed
\ef
.It carriage-return
\er
.It tab
\et
.It vertical tab
\ev
.El
.Pp
印字不可能な文字は、各バイトごとに
.Dq \e
に続いて 3 桁の 8 進数で出力されま
す (Most Significant Byte が先頭です)。
長い行は折り返して表示されます。折り返した部分は
.Dq \e
に続く改行で
示されます。各行の最後には
.Dq $
が出力されます。
.Pp
.It [2addr]n
もし、(
.Fl n
オプションによって)デフォルトの出力が停止されていないなら、
パターンスペースの内容を標準出力に書き出します。
また、パターンスペースを次の入力行
で置き換えます。
.Pp
.It [2addr]N
パターンスペースに、次の入力行を追加します。このとき、元の内容との
間に改行を埋め込みます。現在の行番号が変化することに注意してください。
.Pp
.It [2addr]p
パターンスペースの内容を標準出力に書き出します。
.Pp
.It [2addr]P
パターンスペースの最初の改行までの内容を標準出力に書き出します。
.Pp
.It [1addr]q
スクリプトの残りをスキップし、次の繰り返しを開始せずに終了します。
.Pp
.It [1addr]r file
次の入力行を読み込む直前に、ファイル
.Em file
の内容を標準出力に書き出します。
.Pp
.It [2addr]s/regular expression/replacement/flags
パターンスペース内で、 regular expression に対応する最初の部分を replacement で
置換します。バックスラッシュと改行以外の文字をスラッシュのかわりに用
いることができます。regular expression と replacement の中に、リテラルな区切り文
字を置きたいときは、
.Dq \e
に続けて区切り文字を置きます。
.Pp
replacement 中のアンパサンド
.Pq Dq &
は、regular expression にマッチした文
字列に置換されます。
.Dq &
の前に
.Dq \e
を置くことで、この特殊な
.Dq &
の解釈を禁止
することができます。
.Dq \e#
(
.Dq #
は数字)は、regular expression の
後方参照(back reference)表現にマッチするテキストに置換されます(
.Xr re_format 7
参照)。
.Pp
replacement に改行を含めることで、入力行を分割することができます。
改行の直前に
.Dq \e
を置くことで、replacement 中に改行を含めることができ
ます。
.Pp
s 関数の
.Em flags
には、以下のものを0個以上指定できます。
.Bl -tag -width "XXXXXX" -offset indent
.It Em N
パターンスペースで
.Em N
回目にマッチした regular expression のみを置換します。
.It g
先頭だけではなく、重なりあわない全てのマッチした内容を
replacementで置換します。
.It p
置換が行われたら、パターンスペースの内容を標準出力に書き出します。
もし、置換後の内容が置換前のものと同一でも置換が行われたとみなします。
.It w Em file
もし置換が行われたなら、パターンスペースの内容をファイル
.Em file
に追加します。
もし、置換後の内容が置換前のものと同一でも置換が行われたとみなします。
.El
.Pp
.It [2addr]t [label]
入力行が読み込まれてから、あるいは
.Dq t
関数が実行されてから、置換が
行われていれば、指定した label を持つ
.Dq \&:
コマンドへ分岐します。label が指
定されていない場合は、スクリプトの最後に分岐します。
.Pp
.It [2addr]w Em file
パターンスペースの内容をファイル
.Em file
に追加します。
.Pp
.It [2addr]x
パターンスペースとホールドスペースの内容を交換します。
.Pp
.It [2addr]y/string1/string2/
.Em string1
に現れるパターンスペース中の文字を
.Em string2
の対応した
文字に置換します。たとえば、`y/abc/ABC/' はパターンスペース中の文字
a、b、c を大文字に置換します。
`\e' と改行以外のすべての文字を区切りとし
て用いることができます。
.Em string1
、
.Em stirng2
中では、`\e' 直後に改行以外の文字が続く場合はリテラルに解釈され、
`\en' は改行と解釈されます。
.Pp
.It [2addr]!function
.It [2addr]!function-list
関数または関数リストを、 address で選択されていない行に適用します。
.Pp
.It [0addr]:label
この関数は何も行いません。
.Dq b
、
.Dq t
で用いるラベルを生成します。
.Pp
.It [1addr]=
行番号と改行を標準出力に書き出します。
.Pp
.It [0addr]
空行は無視されます。
.Pp
.It [0addr]#
.Dq #
とそれ以降の文字は無視されます(コメントとして扱われます)。
ただし、ファイルの行頭の 2
文字が `#n' の場合、デフォルトの出力が禁止されます。これは、コマンドライン
に
.Fl n
オプションを指定した場合と等価です。
.El
.Sh 環境変数
.Ev COLUMNS ,
.Ev LANG ,
.Ev LC_ALL ,
.Ev LC_CTYPE ,
.Ev LC_COLLATE
の環境変数が、
.Xr environ 7
の記述通りに、
.Nm
の実行に影響します。
.Sh 診断
.Ex -std
.Sh 関連項目
.Xr awk 1 ,
.Xr ed 1 ,
.Xr grep 1 ,
.Xr regex 3 ,
.Xr re_format 7
.Sh 規格
.Nm
ユーティリティは
.St -p1003.2
のスーパセットとなっているはずです。
.Pp
.Fl i
オプションは非標準の
.Fx
拡張であり、他のオペレーティングシステムでは使用できないかもしれません。
.Sh 歴史
.Nm
コマンドは
.At v7
で登場しました。