アクトインディ 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
置換
一行目の0
をx
に置換したい場合、下記の様になります。
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
にはありますので、みなさん探求してみてください。