sedは日暮れて:補遺その1・覚えてい~ますかあ?

ごぶさたしておりました。sed拾遺物語こと補遺です。

補遺1:お取り置きしましょうか?~パターンスペースとホールドスペース

sedは行単位でコマンドを実行するものです。それはどおゆうことかといいますと。56億7千万行のテキストファイルがあったとしても。その全部をどか~んと一気に扱うわけではないということです。森の小人さんのように地道に1行1行、取り込んではコマンドを実行しているわけなんですね。その取り込み先こと、小人さんの作業場のことをパターンスペースといいます。パターンスペースはテンポラリバッファらしいですがアモールバッファ©平沢進とどう違うんでしょおか。うむむ。

冗談はさておき。sedのもうひとつのバッファにホールドスペースというものがあります。これは小人さんの倉庫です。パターンスペースとホールドスペース間でデータを移動できるのがsedの特徴なのでした。

つまり。先にパターンスペースで下味をつけておいた材料をホールドスペースにいったん保管しておいて。別の材料の準備がととのい次第、もう一度パターンスペースに戻して、別の材料とまぜまぜするなどということができるのですね。ホールドスペースは倉庫というより待避所といった方がいいかもしれない。

こおゆうホールドスペースに関係するコマンドには、以下のものがあります。

h , H 
待避コマンド。パターンスペースの内容をホールドスペースにもっ てゆく。 hはそれまでのホールドスペースの内容に上書き、Hはその下に追加する 。 
g , G 
復帰コマンド。ホールドスペースの内容をパターンスペースに戻す 。gは上書き、Gは追加。 

交換コマンド。パターンスペースとホールドスペースの中身をチェ ンジする。 
ある条件をもつ行の順番を入れ替えたり、段落ごとに操作をしたりする場合に使えるコマンドであります。例ですか。はい。
あ。例の前に。複数のコマンドを使うときは、スクリプトファイルの中を

あどれす{ 
こまんどお
別のこまんどお
もういっちょこまんどお
}
という形にしますので念のため。

例文として。次の2行からなるファイルがあるとします。

いざスープの水面に帆を立てて
道のひびから花が咲く

この2行をひっくり返すスクリプトは。1行目をホールドスペースに待避して、2行目(=最終行)の後ろでパターンスペースに戻せという内容になります。

1{ 
h
d
}
${
G

という具合(注:$は正規表現ではなく、最終行を表す)。結果は。

道のひびから花が咲く
いざスープの水面に帆を立てて

注意しなくてはならないのはhとdコマンド。もしhでなくHにした場合、それまでのホールドスペースの下に追加されるので。ホールドスペースが空であったら、その空行の下に追加されてしまうのです。つまりよけいな空行が「いざ~」の上についちゃうわけ。

また、hでホールドスペースに1行目を待避しても、パターンスペースには残っているので (カットするのではなくコピーしているので) dコマンドでいったんパターンスペースから1行目を削除しています。

補遺2:祈るようにsedを探して駆けてたこと~参考文献

「sedは日暮れて」を書く上で参考にしたのは、

Dale Dougherty著、福崎俊博訳『sed & awk プログラミング』(アスキー出版局)
です。筆者の愛が伝わってくるよいご本であります(^0^)。その他にMS-DOSの古い256倍本も一部参考にしました。
インターネット上では、NiftyServe FMCN フォーラムで行われていたSED教室の内容がWebあるいはftpでgetできます。

SEDLEC Release 1.11←95年改訂の最新版(Web) 
SEDLEC Release 1.00←92年のオリジナル版(ftp。docファイル) 
「sedは日暮れて」はsコマンド中心の内容でしたが、こちらは別コマンドを含んだやや難しめの内容だと思います。
NIFTY Serveでは、他にFWORK(在宅ワークフォーラム)でも在宅翻訳がらみで、sedの参考文献の話が出ていたようです。

補遺2

FAQ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です