[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
SEDプログラムは,一つ以上のSEDコマンド,一つ以上の-e
,
-f
,--expression
,そして--file
オプションや,これら
のオプションが使用されていない場合は最初のオプションではない引数で渡され
るものから成り立っています.このドキュメントは"その"SEDスクリプト
を記述します.渡されるscriptとscript-fileの全て連結したもの
の意味はこれで理解できるでしょう.
それぞれのSEDコマンドは,オプションのアドレスやアドレスの幅から成り 立っていて,それには1文字のコマンド名と追加のコマンド特有のコードが続き ます.
3.1 SEDで行を選択する | Selecting lines with SED | |
3.2 正規表現の構文の概要 | Overview of regular expression syntax | |
3.3 SEDバッファのデータが有る場所 | Where SED buffers data | |
3.4 よく使用されるコマンド | Often used commands | |
3.5 あまり使用されないコマンド | Less frequently used commands | |
3.6 頑固なSEDプログラマのためのコマンド | Commands for die-hard SED programmers |
SEDスクリプトのアドレスは,以下の形式のどれでも可能です.
1~2
を使用することになるでしょう.2行目から始
まり3行毎に取り上げるため,2~3
を使用することになるでしょう.10行
目から始まり5行毎に取り上げるため,10~5
を使用することになるでしょ
う.そして,50~0
は50
告げる曖昧な方法にすぎません.
/
文字が含まれる場合,それぞれをバックスラッシュ(\
)でエスケー
プする必要が有ります.
%
はその他全ての単一の文字で置換してもかまいません.)
これは正規表現regexpにも一致しますが,これで/
以外の分離文字
を使用することが可能になります.regexp自身が大量の/
を含んで
いる場合,個々の/
をエスケープするのも退屈なので,それを避けるため
に特に役に立ちます.regexp自身が分離文字を含んでいる場合,それぞれ
をバックスラッシュ(\
)でエスケープする必要が有ります.
I
指示語はGNUの拡張で,
regexpは大文字小文字を無視してマッチします.
アドレスが与えられていない場合全ての行がマッチします.一つのアドレスが与 えられている場合,マッチする行はアドレスがマッチしたものだけになります.
アドレスの範囲はカンマ(,
)で分けられている2つのアドレスで指定する
ことで指定可能です.アドレスの範囲は最初のアドレスにマッチしている行から
始まり,2番目のアドレス(これは含まれます)にマッチするまで続きます.2番目
のアドレスが正規表現の場合,マッチの終りの調査は,最初のアドレスにマッチ
した行の次の行から開始されます.2番目の引数がnumberで最初に
マッチした行のアドレスより小さい(または同じ)場合,一行のみマッチします.
アドレス指定の終りに!
文字を後置するとマッチの意味が否定されます.
すなわち,!
はアドレスの範囲に続いている場合,選択されたアドレスの
範囲にマッチしない行だけが選択されます.これは一つのアドレスに対
しても動作し,おそらくひねくれているだけでしょうが,何もないアドレスに対
しても動作します.
[[後日,正規表現の短い概要を追加するかもしれません.今はAWKのinfoペー ジのような,他の様々な正規表現のドキュメントを参照してください.]]
SEDは2つのデータバッファを管理しています.アクティブなパター ンスペースと,補助的なホールドスペースです."通常の"処理では, SEDは入力ストリームから1行読み込み,それをパターンスペースに配置し ます.このパターンスペースはテキスト操作が生じる場所です.ホールドスペー スは最初は空ですが,パターンスペースとホールドスペースの間でデータを移動 するコマンドが有ります.
本当にSEDを使用するのなら,きっとこれらのコマンドを知りたいと思うで しょう.
#
"コマンド"はコメントを開始します.コメントは次の改行まで続きま
す.
移植性を心配している場合,SED(POSIX.2に準拠していないもの)の実装に
よっては,単一の一行のコメントのみサポートしていて,スクリプトの最初の文
字が#
のときのみのサポートしている可能性があることを覚えておいてく
ださい.
警告:SEDスクリプトの最初の2文字が#n
の場合,-n
(自動的
に出力しない)オプションが強制的に使用されます.スクリプトの最初の行にコ
メントを書き,そしてコメントを文字`n'で開始したい場合で,このように動作
して欲しくない場合は,大文字の`N'を使用するか,`n'の前に少なくとも1つの
スペースを書いてください.
/
文字はs
コマンドで与えられるその他の単一文字で一律に置換
してもかまいません.)
/
文字(または変わりに使用されているその他の文字)は,\
文字を
前置している場合のみ,regexpやreplacementに書くことが可能で
す.連続する2文字\n
を使用して,改行をregexpに書いてもかまい
ません.
s
コマンドは,提供されているregexpに対しパターンスペースのマッ
チを試みます.マッチが成功する場合.マッチしたパターンスペースの位置が
replacementで置換されます.
replacementに\n
(nは1から9までの数字です)での参
照を含めることが可能で,それはn番目の\(
とそのマッチと
\)
に含まれているマッチの位置を参照します.また,replacement
に,パターンスペースのマッチ位置全体を参照する,エスケープされていない
&
文字を含めることも可能です.リテラルの\
,&
,または
改行を最終的な置換物に含めるため,\
を用いてreplacement内の
\
,&
,または改行に,必要となる\
を確実に前置してくだ
さい.
s
コマンドにはゼロ以上の以下のflagsを続けることが可能です.
それ以上のコマンドも入力も処理せずSEDを終了します.自動的な出力が利 用不可能ではない場合,現在のパターンスペースが出力されることに注意してく ださい.
-n
コマンドラインオプションと組み合わせて使用します.
注意:このようなSEDの実装では,自動的な出力が利用不可能ではなく,
p
が与えられているとき,出力行が二重になるものもあります.それ以外
の実装では,行は一回のみ出力されます.両方ともPOSIX.2標準に準拠していて,
どちらかをエラーと考えることはできません.
このため,移植性の高いSEDスクリプトでは,どちらかの動作に依存するこ
とはさせるべきです.-n
を使用して出力したいものを明示的にするか,
p
コマンド(とs
コマンドのp
フラグ)の使用をさけてくださ
い.
{
文字と}
文字で囲んでもかまいません.
コマンドのグループを単一のアドレス(またはアドレスの範囲)のマッチで開始し
たいとき,これは特に役に立ちます.
前のセクションのものより使用されることはおそらく少ないでしょうが,非常に 小さく有用なSEDスクリプトには,以下のコマンドを組み込むことも可能で す.
/
文字は,y
コマンドで与えられるその他の単一文字で一律に置
換してもかまいません.)
source-charsにマッチしたパターンスペースのすべての文字を,対応する dest-charsの文字に変換します.
/
(またはそのかわりに使用されている文字),\
や改行のインスタ
ンスは,それぞれのインスタンスに\
でエスケープを提供することで,
source-charsやdest-charsのリストに書くことが可能です.
source-charsとdest-charsのリストには,(エスケープを取り除く
と)同じ数の文字を含める必要があります.
このコマンドに続いているテキストの行(終りの\
は出力から取り除かれ
ます)を,現在のサイクルの終りや,次の入力行が読み込まれたときに出力され
るキューに保存します.
このコマンドに続いている行(終りの\
は出力から取り除かれます)をすぐ
に出力します.
\
は出力から取り除かれます)を,最後の行の位置(または,ア
ドレスが指定されていない場合はそれぞれの行の位置)に出力します.新しいサ
イクルは,パターンスペースが削除されてから,このコマンド終了後に開始され
ます.
\
文
字)は,Cのスタイルでエスケープされた様式で出力されます.長い行は分割を示
す\
を後置して分割されます.それぞれの行の終りには$
で印が付
きます.
filenameの内容を読み込み,現在のサイクルの終りや次の入力行が読み込 まれた時に出力ストリームに挿入するためキューに保存します.filename が読み込み不可能な場合,エラーを示すことなく空のファイルが読み込まれてい るかのように扱われることに注意してください.
w
コマンドは(s
コマンド成
功時のw
フラグのインスタンスを含めて),おなじFILEストリームを
通じて出力されます.
パターンスペースの位置を最初の改行まで出力します.
ほとんどの状況で,これらのコマンドを使用するよりは,おそらくPERLの ようなものでプログラムをした方が良いでしょう.しかし,時にはSEDに固 執することを約束する人もいて,これらのコマンドで全く複雑なスクリプトを書 くことも可能になります.
b
とt
コマンドに対するlabelの位置を指定します.それ以
外では何もしません.
t
分岐の処理以降に,s
の置換で成功し
たしたものがある場合のみlabelに分岐します.labelは省略可能で,
その場合は次のサイクルが開始されます.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |