ed をつかってみる

ツッコミスパムがついに私のところにもやってきたので,bulkfeeds DNSBL を用いたフィルタを導入してみたが,

既に来てしまったツッコミは手動で消さないといけない.そこで,xrea 鯖に ssh でログインしてみたところ…



vi が使えねー!!



いや,vi (というか vim) はあるんだけど,なぜか root でしか実行できないようになってる.ex は vim への symlink になってる.Emacs などの高機能なエディタはもちろんない.



ということはですね…,えーと,あれを使えと?

……ed を??



そう,なぜか ed だけは一般ユーザでも動くのである.しかしラインエディタを使うは初めてだったりする.man ed してみたがさっぱりわからん.ぐぐってみたが情報が極端に少ない.せいぜい以下の 2 つくらい.まあとりあえず使ってみる.以下個人的メモだけど,使い方の参考にでもなるかな.

% ed /path/to/file

  • リターンキーを押すと,現在の行を表示しながら 1 行ずつ進んでいく.
  • そのまま調子に乗って連打していると EOF までいってしまうので,ここで指定した行への飛び方を覚えよう.単に行数を打てばよい.例えば「3」と打てば,3 行目にジャンプしてその行を表示する.5 行進むには「+5」,戻るには「-5」.
  • 最終行は「$」で表される.これは正規表現と同じだね.それじゃ先頭行は「^」かとうっかり思いそうだけど,これは間違いで,よく考えたら「1」で済むのだ.
  • 今いる行 (カレント行) を表示するには「.」である.これは Unix のカレントディレクトリと同じ発想 (Mew にも採り入れられているね).
  • さらに高度な表示は「p」(for 'print') だ.「5p」で 5 行目を表示するのは「5」と同じだけど,「5,10p」で一気に 5〜10 行が表示される.これでかなり楽になる.この「行数+コマンド文字」という表記は ed 制御の基本である.
  • 挿入は「a」(for 'append') か「i」(for 'insert').vi と同様に,カレント行の前に挿入するには「i」で,後に挿入するには「a」.ピリオドだけの行を挿入すれば挿入モードから抜ける.
  • 行削除は「d」(for 'delete').「5,8d」で 5〜8 行目を削除.
  • 行の修正は「c」(for 'change').指定された行が,入力された行で置き換えられる.入力の終わりはやはりピリオド行.
  • 置換は「s」(for 'substitute').「2,7s/foo/bar/」で,2〜7 行目の最初の foo を bar に置き換える.最後に「g」をつけて「2,7s/foo/bar/g」にすれば,その行の全ての foo を bar に置き換える.さすが sed の原型,馴染み深い書式.
  • 編集が終わったら,「w」(for 'write') でファイルに書き込んで「q」(for 'quit') で終了.このあたりも vi と同じ.
まあこれだけ知ってれば一通りの編集はできるかな.基本的に vi 使いなら意外ととっつき易い.vi や ex が使えない時のために (例えば termcap が壊れてる時とか,/usr がマウントできなかった時とか.去年 HDD がおかしくなった時,そういう目にあった),知っておいて損はないと思う.それに,sed は ed のコマンドを全部理解するので,sed に高度なことをやらせるのにも役に立つかも.



ちなみに tDiary のファイルは「ピリオドだけの行」が記事のデリミタになってたりするwwww.今回は影響なかったけど,ed でこの行を編集するにはどうすればいいんだろうな.



おまけ.crazy っぷりにワロタ.確かに「これらは単語ですらない!!! (Those aren't even WORDS!!!!)」ってすごいな.