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

区分
AdventCalender
報告者

アクトインディ 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にはありますので、みなさん探求してみてください。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa