アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

端末が壊れても安心! ed & ex の最低限の使い方

アクトインディ Advent Calendar 2015の24日目の記事です。

こんにちは、chibaです。 色々なサーバーで作業していると稀に端末が壊れてしまった状況に遭遇することがあります。
こういう場合、大抵は端末を直している暇はなかったりしますが、そんな場合でも安心して編集できるのはラインエディタです。
今回は、そんな非常時でも安心して利用できるed(と互換性の高いex)の最低限のコマンドを紹介したいと思います。

ファイルの中身を表示する

まず、

0 1 2 3 4 5 6 7 8 9 0 1 1 2 3 4 5 6 7 8 9 0 2 1 2 3 4 5 6 7 8 9 0 というファイルfoo.txtがあったとします。

$ ed foo.txt で起動します。

54 %p 0 1 2 3 4 5 6 7 8 9 0 1 1 2 3 4 5 6 7 8 9 0 2 1 2 3 4 5 6 7 8 9 0

%pでファイル全体を表示します。
大体は、viのコマンドと同じですので、viを使っている人は簡単に操作できると思います。

ファイルの保存と終了

編集内容の保存は、wで、終了はqです。
わかりやすいですね。

ファイルの中身を編集する

行の後ろへの追加

ここで、最終行に行を追加してみたいと思います。

%a 4 1 2 3 4 5 6 7 8 9 0 .

%aで最終行(%)に(A)ppendしています。
編集の終了は、改行して単独の.を入力します。
こんな感じになりました。 %p 0 1 2 3 4 5 6 7 8 9 0 1 1 2 3 4 5 6 7 8 9 0 2 1 2 3 4 5 6 7 8 9 0 4 1 2 3 4 5 6 7 8 9 0

行の前への挿入

4行目の前に3 1 2 3 4 5 6 7 8 9 0を追加したいとします。
その場合下記のように書けます。

4i 3 1 2 3 4 5 6 7 8 9 0 .

こんな感じになりました。 :%p 0 1 2 3 4 5 6 7 8 9 0 1 1 2 3 4 5 6 7 8 9 0 2 1 2 3 4 5 6 7 8 9 0 3 1 2 3 4 5 6 7 8 9 0 4 1 2 3 4 5 6 7 8 9 0

置換

一行目の0xに置換したい場合、下記の様になります。

1s,0,x x 1 2 3 4 5 6 7 8 9 0 %p x 1 2 3 4 5 6 7 8 9 0 1 1 2 3 4 5 6 7 8 9 0 2 1 2 3 4 5 6 7 8 9 0 3 1 2 3 4 5 6 7 8 9 0 4 1 2 3 4 5 6 7 8 9 0

全体かつ行内で見付かった1は全てXに置換する場合、下記の様になります。

%s,1,X,g %p x 1 2 3 4 5 6 7 8 9 0 X X 2 3 4 5 6 7 8 9 0 2 X 2 3 4 5 6 7 8 9 0 3 X 2 3 4 5 6 7 8 9 0 4 X 2 3 4 5 6 7 8 9 0

お判りの通り、ほとんどsedと同じですね。

まとめ

端末が壊れた場合に普段から備える意味でedの使い方を解説してみました。
追記と置換を知っていれば大抵は大丈夫ですね。

また、edは標準入力からコマンドを入力することが可能でプログラマブルに使えたりもします(これがsedに発展)

(echo '%s,33,66,g';echo 'w';echo 'q')|ed foo.txt

等々

他にも奥深い機能がedにはありますので、みなさん探求してみてください。