[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バグの報告は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
コマンドがファイルの
リストの最後に出力されるとき,何も出力せずに終了します.GNU sed
は
-n
コマンドスイッチが指定されていない限り,終了前にパターンス
ペースを出力します.この選択は設計されたものです.
例えば,以下の動作を考えます.
sed N foo bar |
これは,fooが偶数または奇数の行があるかどうかに依存します(10).または,パターンにマッチした後
に続く数行を読み込むスクリプトを書いているとき,伝統的な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
変数を空で
はない値に設定することです.
sed
は,POSIXの基本正規表現の構文を使用しています.標準に
よると,エスケープシーケンスの意味はこの構文では未定義です.
sed
で有名なものは,\|
,\+
,\?
,
\
,,
\
\<
,\>
,\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 section Invocation)では保
護されたファイルを破壊します.これはバグではありませんが,Unixファイル
システムで動作する方法に影響します.
ファイルへの許可はファイルのデータに生じる可能性があることを告げていま
すが,ディレクトリの許可はディレクトリのファイルのリストに生じる可能性
があることを告げています.sed -i
は書き込み属性でディスクに存在し
ているファイルを開きませんが,最終的にはオリジナルファイル名に名前を変
更する一時的なファイルで作業します.ファイルの名前を変更したり削除した
りする場合,実際にはディレクトリの内容を編集していることになるので,そ
の処理はファイルではなくディレクトリの許可に依存します.同じ理由で,
sed
は読み込み専用のディレクトリの書き込み可能なファイルで
`-i'を使用しません(しかし,信じられないことにバグとして報告して
きた人はいません…).
0a
は動作しません(エラーになります)行0はありません.0は特殊なアドレスで,スクリプトの開始時にアクティブに するため,`0,/RE/'のように処理するためだけに使用されます. `1,/abc/d' と書き,最初の行に単語`abc'が含まれている場合,ア ドレス範囲は(ファイルの終わりでなければ)少なくとも二行必要なので,マッ チは無視されます.しかし,期待することは,`abc'を含んでいる行が最 初に見つかるまで,すべての行を削除することなので,これは `0,/abc/d'で実行されます.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on October, 5 2005 using texi2html 1.70.