72c39dee78
bsdtar.1 will be added and tar.1 deleted after repocopy is finished. Submitted by: kano at na rim or jp Coordinated by: Nobuyuki Koganemaru <n-kogane at syd odn ne jp>
536 lines
14 KiB
Groff
536 lines
14 KiB
Groff
.\" 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.
|
|
.\" 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.38.2.1 2005/02/26 13:44:04 brueffer Exp %
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd July 17, 2004
|
|
.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 がコンテキストアドレスである場合、
|
|
.Nm
|
|
は、
|
|
1 つめの address にマッチしたパターンスペースを 2 つめの
|
|
address に再びマッチさせようとはしません。
|
|
.Nm
|
|
は、選択された範囲の
|
|
次の行から、1 つめの address にマッチする行の検索を
|
|
再開します。
|
|
.Pp
|
|
エクスクラメーション関数
|
|
.Pq Dq \&!
|
|
を用いることにより、address
|
|
で選択されていない範囲に編集コマンドを適用させることもできます。
|
|
.Sh "sed の正規表現"
|
|
.Nm
|
|
で使われる正規表現は、デフォルトでは Basic Regular expression (BRE
|
|
.Xr re_format 7
|
|
を参照) ですが、
|
|
.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
|
|
の内容を標準出力に書き出します。
|
|
.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 Ar N
|
|
パターンスペースで
|
|
.Ar 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 string2
|
|
中では、`\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
|
|
文字が
|
|
.Dq #n
|
|
の場合、デフォルトの出力が禁止されます。
|
|
これは、コマンドラインに
|
|
.Fl n
|
|
オプションを指定した場合と等価です。
|
|
.El
|
|
.Sh 環境変数
|
|
.Ev COLUMNS , LANG , LC_ALL , LC_CTYPE , 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 E , a ,
|
|
.Fl i
|
|
オプションは非標準の
|
|
.Fx
|
|
拡張であり、他のオペレーティングシステムでは使用できないかもしれません。
|
|
.Sh 歴史
|
|
.An L. E. McMahon
|
|
が記述した
|
|
.Nm
|
|
コマンドは
|
|
.At v7
|
|
で登場しました。
|
|
.Sh 作者
|
|
.An "Diomidis D. Spinellis" Aq dds@FreeBSD.org
|
|
.Sh バグ
|
|
値 0x5C
|
|
.Tn ( ASCII
|
|
.Ql \e )
|
|
のバイトを含むマルチバイト文字は、
|
|
.Dq a ,
|
|
.Dq c ,
|
|
.Dq i
|
|
コマンドへの引数では、誤って行継続文字として扱われてしまうかもしれません。
|
|
マルチバイト文字は、
|
|
.Dq s
|
|
と
|
|
.Dq y
|
|
コマンドでの区切り文字として使用できません。
|