sedは日暮れて:第9回 住所指定

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^)

第10回

コメントを残す

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