« 第8回 異星の客 | メイン | 第10回 コマンド落穂拾い »

sedもいよいよ肉詰めピーマンじゃなかった大詰めの段階に入ってまいりました。今回は置換以外のコマンドを扱うのに必須のアドレスの話です(検索置換の場合でも使用しますが)。
アドレスって一体何かといえば、行指定のことなんです。

あれ一言で終わっちゃったい。 それじゃあんまりなのでもう少し詳しく。アドレスには、行アドレスとパターンアドレスの2種類があります。おしまい。

こんなところで終わるなっちゅ~に。え~っと。前回までの検索置換 のお話のなかではアドレスは指定しておりませんでした。というのは、検索置換をすべての行に適用したかったからです。ぜ~んぶの行の中から探して置換せよ!と言っていたからですね。それが、アドレスを指定すると、地域限定となるですよ。

つまり。行アドレスだと、何行目だけにコマンドを適用しなさいという、行番号を指定します。それ以外の行をsedは無視します。一方、パターンアドレスだと、そのパターン(正規表現や文字列などで指定)がある行だけにコマンドを適用しなさいということになります。

アドレスは、sed構文の中ではコマンドのすぐ前に置きます。 では例をあげて~いこ~~よお。
こんなファイルsample.txtがあったとさ。

千葉・船橋市
千葉・柏市
東京・江東区


検索置換で千葉のあとの・を県にしたいとき。パターンアドレス指定だと、こういう文になります。

sed "/千葉/s/・/県/" sample.txt

置換コマンドのsの前に、/千葉/をつけ、「千葉という文字列が入っている行だけで、・を県に変えなさい!」と言っているわけです。パターンアドレス指定の場合は、前後をスラッシュ(/)で囲むことに注意!

行指定だと、変換したいのは、1行目と2行目ですので、

sed "1,2s/・/県/" sample.txt

となります。カンマ(,)を行番号の間に置き、1行目から2行目までという意味にしています。ちなみに、 3,10だと3行目から10行目までということになります。行指定の場合は、行番号の前のスラッシュは不要です。

パターンアドレス指定と行指定は1つの文の中で混在させても使えます。
たとえば、1行目から最初の空行(空行は、正規表現で^$と表すのを思いだしてください)までを指定したいときは、1,/^$/とします。

さてこれで置換以外のコマンドに入る準備ができました。来週の第10回でsedの基本は終わることになります。では。来週までしばしお待ちを(^0^)

トラックバック

このエントリーのトラックバックURL:
http://www.chimimo.com/mt/mt-tb.cgi/10

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2006年08月07日 22:55に投稿されたエントリーのページです。

ひとつ前の投稿は「第8回 異星の客 」です。

次の投稿は「第10回 コマンド落穂拾い 」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

www.flickr.com
chimimo's photos More of chimimo's photos
Powered by
Movable Type