sedは日暮れて:第8回 異星の客

さあゆこう!sedの世界にハインライン。←おやじぎゃぐかも(^^;)

コマンドラインの直線の世界を2次元に広げてくれるありがたいファイルがスクリプトファイルです。おおなんだかアボット『多次元☆平面国』(東京図書)みたい。ラインランドからフラットランドへ。

私は最初スクリプトファイルの存在を知らずにsedの文をぜ~んぶコマンドラインで打ち込んでおりまして。うううう。聞くも涙、語るも涙さくりもよよの辛苦でございました。この悲劇を決して繰り返させるまじ!とここにでででんとスクリプトファイルのお話をするものであります。ごっほん。

sed -f スクリプトファイル 対象ファイル > 出力ファイル
ああいきなり構文が出てきました。気がはやいんだからもう。前回までの構文と変わっているところを探しますと。-fオプションとスクリプトファイルが加わっていて、”s/検索する言葉/置換する言葉/フラグ”というのがなくなっているのですね。まずオプションからご説明をば。sedのオプションは、以下の通り。

-f
このあとにスクリプトファイルがくるからねええという前ぶれ 
-e
このあとにくるのは命令だからねええという前ぶれ 
-n
入力行をぜ~んぶ自動出力するのはやめい!というオプション 
-nを使うケースってすごく稀だと思われるので、今回やるのは、上ふたつのオプションのみにします。で例によって例のごとく例。テキストファイルsample2.txtの中身が次のようなものだとします。

例1: はんにばるかにばるれくた。 例2も参照のこと。
例2: じょおでえほぉすた。
例3: だるぐりっしゅとこおでりあ。 例1、例2も参照のこと。

このファイルの中で、「例」をExampleに、さらに、「参照のこと」を「参照してください」に変えたいとします。前回までのやり方だと、

sed “s/例/Example/g” sample2.txt > pppp

として、Exampleに変換されたファイルを一旦作業ファイルppppの中に納めたうえで、さらにそのppppファイルに対して、

sed “s/のこと/してください/” pppp > kekka.txt

と打ち込んで最終結果ファイルkekka.txtを作る必要があります。2段階必要なわけですね。
でもこれをいちいちやってたらしんど~いめんど~い。ふふふふふ。実は簡略するやり方があります。さっきのスクリプトファイル呼び出しの-fはほんのちょっとだけこっちに置いといて、先に-eを使ってみましょう。

sed -e “s/例/Example/g” -e “s/のこと/してください/” sample2.txt > kekka.txt

です。ひとつひとつの命令の前に、-eを置くことで、2つの命令を1行で表現できました。お~め~で~とおおお(^0^)

がこれにしても、なが~い1行をミスタイプなしに一気呵成に(って別に速度が問われるわけではないですが(^^;)打ち込まなければならないことには変わりはありません。でもでも。スクリプトファイルなら。エディタを使ってゆっくり編集ができます。今と同じことをスクリプトファイルでやってみましょう。

エディタを起動して、次の2文を打つ。1行にひとつの命令。
s/例/Example/g
s/のこと/してください/

その2文のおさまったテキストファイルに名前をつけて保存。ここではscriptという名にしましょう。

コマンドラインで、次のようにsedの文を打つ。
sed -f script sample2.txt > kekka.txt

これでおしまい。簡単になりましたでしょおお?
-fでscriptの中身を呼び出して、それを1行ずつ“~”の中身に入れてくれているのですねん。正規表現のミスなんかで、sedを失敗した場合も、スクリプトファイルの中身だけ入れ換えればいいだけでいちいちなが~~い文を打たなくてすむため、非常に楽です(^0^)
もちろん、スクリプトファイルは、sedの置換コマンドだけでなく、他のコマンドの場合にも使用できます。
というわけで、今回で置換コマンドのお話はおしまい。次回から、sedの別 コマンドについて解説してゆきます。ではではあまたらいしゅうううう。

第9回

コメントを残す

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