Go to the first, previous, next, last section, table of contents.


バグの報告

バグの報告はbug-gnu-utils@gnu.orgに電子メールを送ってください. Subject:フィールドのどこかに,単語"sed"を含めてください.また, 可能であれば,報告の内容にsed --versionの出力も含めてください.

以下のようなバグの報告を送らないでください.

	[while building frobme-1.3.4]
	$ configure 
	sed: file sedscr line 1: Unknown option to 's'

@acronym{GNU} sedでお気に入りのパッケージをコンフィグレーションできない場合, 特定の問題を確認するために時間をかけ,スタンドアローンのテストケースを作 成してください.Cコンパイラのようなその他のプログラムとは異なり, sedに対してそのようなテストケースを作成することはまったく単純です.

スタンドアローンのテストケースには,テストを実行するために必要なすべての データと,問題を生じたsedの呼び出しで指定したものを含めてください. スタンドアローンのテストケースは小さい方が良いでしょう.テストケースは, "frobme-1.3.4のコンフィグレーションを試みた"というような,sed からかけ離れているものを必要とすべきではありません.そうです,それはバグ を探す情報として原則的には十分ですが,見通しはあまり現実的ではありません.

以下は一般的なバグやバグではないもので報告されているものです.

sed -ns/regex/replace/p
sedのバージョンによっては,`-n'コマンドスイッチが指定されていない 限り`s'コマンドの`p'(プリント)オプションを無視するものがあります.それ以 外のバージョンは`p'オプションを尊重します.どちらの手法もPOSIX.2で は許可されていて,GNU sed(@acronym{GNU} sedを基本としたもの)では 後者の手法になっています.私は,複雑なスクリプトを書くときは,この手法が より良いと思っています(自由に行動できます)が,移植性の高いスクリプトでは, どちらの動作でも正しく動作するように書くべきです.
正規表現の構文の破壊
sedは,Posixの基本正規表現の構文を使用しています.標準によると, エスケープシーケンスの意味はこの構文では未定義です.sedで有名なも のは,\|\+\?\\\<\>\b\B\w,そして\Wで す. Posixの基本正規表現を使用しているすべてのGNUプログラムでは,sedは これらのエスケープシーケンスをメタ文字として解釈します.そのため, x\+は一つ以上のxの出現にマッチします.abc\|defabcまたはdefにマッチします. この構文は,他のsedに対して書かれたスクリプトを実行するとき問題に なるかもしれません.sedプログラムには,\|\+がリテ ラル文字の|+にマッチするという仮定を用いて書かれているも のもあります.そのようなスクリプトを,GNU sedや@acronym{GNU} sed のような近代的なsedを実装しているものを用いて使用する場合,贋のバッ クスラッシュを削除して修正する必要があります. 更に,このバージョンのsedは,印刷不可能な文字(マルチバイト文字を 含む)をスクリプトに挿入するため,いくつかのエスケープ文字(\a\c\d\o\r\t\v\x)をサポートしています.これらは,他のsedに対して書かれて いるスクリプトで同様な問題を生じるでしょう.
-iで読み込み専用のファイルを破壊する
手短に言うと,sed d -iでは読み取り専用のファイルの内容を削除し, 一般的に-iオプション((see section 呼び出し)では保護 されたファイルを破壊します.これはバグではありませんが,Unixファイルシス テムで動作する方法に影響します. ファイルへの許可はファイルのデータに生じる可能性があることを告げています が,ディレクトリの許可はディレクトリのファイルのリストに生じる可能性があ ることを告げています.sed -iは書き込み属性でディスクに存在してい るファイルを開きませんが,最終的にはオリジナルファイル名に名前を変更する 一時的なファイルで作業します.ファイルの名前を変更したり削除したりする場 合,実際にはディレクトリの内容を編集していることになるので,その処理はファ イルではなくディレクトリの許可に依存します.同じ理由で,sedは読み 込み専用のディレクトリの書き込み可能なファイルで-iを使用しません (しかし,信じられないことにバグとして報告してきた人はいません...).


Go to the first, previous, next, last section, table of contents.