Next: Extended regexps, Previous: Other Resources, Up: Top
バグの報告はbug-gnu-utils@gnu.orgに電子メールを送ってください.
Subject:
フィールドのどこかに,単語“sed”を含めてください.また,
可能であれば,報告の内容にsed --version
の出力も含めてください.
以下のようなバグの報告を送らないでください.
while building frobme-1.3.4 $ configure error--> sed: file sedscr line 1: Unknown option to 's'
GNU sedでお気に入りのパッケージをコンフィグレーションできない場合, 特定の問題を確認するために時間をかけ,スタンドアローンのテストケースを 作成してください.Cコンパイラのようなその他のプログラムとは異なり, sedに対してそのようなテストケースを作成することはまったく単純 です.
スタンドアローンのテストケースには,テストを実行するために必要なすべて のデータと,問題を生じたsedの呼び出しで指定したものを含めてく ださい.スタンドアローンのテストケースは小さい方が良いでしょう.テスト ケースは,“frobme-1.3.4のコンフィグレーションを試みた”というような, sed からかけ離れているものを必要とすべきではありません.そう です,それはバグを探す情報として原則的には十分ですが,見通しはあまり現 実的ではありません.
以下は一般的なバグやバグではないもので報告されているものです.
N
コマンド例えば,以下の動作を考えます.
sed N foo bar
これは,fooが偶数または奇数の行があるかどうかに依存します1.または,パターンにマッチした後 に続く数行を読み込むスクリプトを書いているとき,伝統的なsedの 実装では,以下のように書くことが強制されます.
/foo/{ $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N }
以下の代わりです.
/foo/{ N;N;N;N;N;N;N;N;N; }
いずれにせよ,もっとも単純な回避方法は,伝統的な動作に依存するスクリプ
トで$d;N
を使用すること,または,POSIXLY_CORRECT
変数を空で
はない値に設定することです.
\|
,\+
,\?
,
\,\
,\<
,\>
,\b
,\B
,
\w
,そして\W
です.
posixの基本正規表現を使用しているすべてのGNUプログラムでは,
sedはこれらのエスケープシーケンスを特殊文字として解釈します.
そのため,x\+
は一つ以上のx
の出現にマッチします.
abc\|def
はabc
またはdef
にマッチします.
この構文は,他のsedに対して書かれたスクリプトを実行するとき問
題になるかもしれません.sedプログラムには,\|
と
\+
がリテラル文字の|
と+
にマッチするという仮定を用い
て書かれているものもあります.そのようなスクリプトを,
GNU sedのような近代的なsedを実装している
ものを用いて使用する場合,偽のバックスラッシュを削除して修正する必要が
あります.
更に,このバージョンのsedは,印刷不可能な文字(マルチバイト文
字を含む)をスクリプトに挿入するため,いくつかのエスケープ文字
(\a
,\c
,\d
,\o
,\r
,\t
,
\v
,\x
)をサポートしています.これらは,他のsed
に対して書かれているスクリプトで同様な問題を生じるでしょう.
-i
で読み込み専用のファイルを破壊するsed d -i
では読み取り専用のファイルの内容を削除し,
一般的に-i
オプション((see Invocation)では保
護されたファイルを破壊します.これはバグではありませんが,Unixファイル
システムで動作する方法に影響します.
ファイルへの許可はファイルのデータに生じる可能性があることを告げていま
すが,ディレクトリの許可はディレクトリのファイルのリストに生じる可能性
があることを告げています.sed -i
は書き込み属性でディスクに存在し
ているファイルを開きませんが,最終的にはオリジナルファイル名に名前を変
更する一時的なファイルで作業します.ファイルの名前を変更したり削除した
りする場合,実際にはディレクトリの内容を編集していることになるので,そ
の処理はファイルではなくディレクトリの許可に依存します.同じ理由で,
sedは読み込み専用のディレクトリの書き込み可能なファイルで
-iを使用しません(しかし,信じられないことにバグとして報告して
きた人はいません...).
0a
は動作しません(エラーになります)