バグの報告は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 -nとs/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\|defは
abcまたは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.