ed をつかってみる
ツッコミスパムがついに私のところにもやってきたので,bulkfeeds DNSBL を用いたフィルタを導入してみたが,
既に来てしまったツッコミは手動で消さないといけない.そこで,xrea 鯖に ssh でログインしてみたところ…vi が使えねー!!
いや,vi (というか vim) はあるんだけど,なぜか root でしか実行できないようになってる.ex は vim への symlink になってる.Emacs などの高機能なエディタはもちろんない.
ということはですね…,えーと,あれを使えと?
……ed を??
そう,なぜか ed だけは一般ユーザでも動くのである.しかしラインエディタを使うは初めてだったりする.man ed してみたがさっぱりわからん.ぐぐってみたが情報が極端に少ない.せいぜい以下の 2 つくらい.
- http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/basic/node153.html
- http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/HowToUnix/5-1.html
% 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 と同じ.
ちなみに tDiary のファイルは「ピリオドだけの行」が記事のデリミタになってたりするwwww.今回は影響なかったけど,ed でこの行を編集するにはどうすればいいんだろうな.
おまけ.crazy っぷりにワロタ.確かに「これらは単語ですらない!!! (Those aren't even WORDS!!!!)」ってすごいな.