2006-12-21

ed でファイル編集

先日の ed コマンドのエントリー

に対して、はてなブックマークでこんなコメントが入った。

edコマンド次第で「ファイルの先頭から文字列検索して3件目に見つかった行の1行下を置換」とかもできるしね。

はてなブックマーク - clmemo@aka: ed を sed 風に使ってファイル内の文字列を置換する より引用

ed スクリプターの Hack 魂をくすぐる、いい練習問題に見える。ed スクリプトを書いてみやう。

「foo」という文字列を検索して「hoge」を「fuga」に置換するとして、以下のファイルを foo.ed というファイル名で保存。

/foo/
//
//
+
s/hoge/fuga/g
w

実行は以下の通り。

$ ed - foo.txt < foo.ed

ed スクリプトの解説

foo.ed の解説を簡単に。

/foo/ は文字列 foo の検索。スラッシュの間に検索文字列 (正しくは正規表現) を記述する。続く // は、直前の検索を繰り返す。つまり、最初の三行で「文字列検索を 3 回実行」したことになる。

続く + (プラス記号) は、次行にポイントを移動させる命令。

次行にポイントを移したら、その行に対して s/hoge/fuga/g で置換。そして w で保存。

ed には、if 文やループ構文がないので、複雑なスクリプトは書けない。でも、ちょっとしたファイル編集を書くのは楽しい。

No comments:

Post a Comment