edコマンドの使い方

Linux サーバを管理していると、シェルスクリプトを使ってテキスト編集をすることがよくあります。例えば、シェルスクリプトからシェルスクリプトを作成して、実行する時などです。このような処理の場合、シェル内部で ed エディタを起動する、 ed コマンドをよく使います。この ed コマンドで起動できる ed エディタの基本的な使用方法をまとめてみました。

ed コマンドの概要

ed エディタでファイルを開くには、次のようにします。

ed sample-file.txt

ed エディタには、コマンドモードと編集モードがあります。上記コマンドで ed エディタを起動した直後は、コマンドモードになっています。コマンド実行後に表示されている数字はファイルのバイト数を示します。

user01@debian:~$ ed sample-file.txt
70

作業中の状態がコマンドモードか編集モードかを区別しやすくするために P を入力するとコマンドモード時に行頭に * (アスタリスク)がつくようになります。

user01@debian:~$ ed sample-file.txt
140
P
*

ed エディタは、行ごとに編集するエディタなので編集モードに移るときには必ずどの行を編集するかを指定して編集モードに映ることになります。例えば、5行めを表示する場合には、次のようにします。

user01@debian:~$ ed sample-file.txt
70
P
*5p
(ここに5行目の内容が表示される。)

行指定の方法

ed エディタは、行指向のテキストエディタなので使用する時には、常に行を指定する必要があります。行指定は、次のような方法があります。

.(ピリオド)
カレント行を指定します。
n (数字)
n 行目を指定します。
+
カレント行の1行後の行を指定します。
+n (数字)
カレント行より n 行後の行を指定します。
カレント行より1行前の行を指定します。
-n (数字)
カレント行より n 行前の行を指定します。
$
ファイルの最終行を指定します。
a (数字), (カンマ)b (数字)
a 行目から b 行目を指定します。5行目から10行目を指定する場合は、 5,10 、ファイル全体を指定する場合は、 1,$ とします。
,(カンマ)
ファイル全体を指定します。 1,$ と指定するのと同じです。
;(セミコロン)
カレント行から最終行までを指定します。 .,$ と指定するのと同じです。

コマンド

テキストの編集や置換、行の削除などは、行指定とコマンドを組み合わせて行います。おもなコマンドは、次のとおり。

a
指定した行の後ろにテキストを追加します。行指定をしない場合は、カレント行の後ろに追加されます。編集モードになるので . (ピリオド)でコマンドモードに戻ります。
c
指定した範囲の行を削除して、そこにテキストを追加します。行範囲を指定しない場合は、カレント行を削除し、テキストを追加します。編集モードになるので . (ピリオド)でコマンドモードに戻ります。
d
指定した範囲の行を削除します。行範囲を指定しない場合は、カレント行を削除します。
i
指定した行の前にテキストを追加します。行を指定しない場合は、カレント行の前に追加されます。編集モードになるので . (ピリオド)でコマンドモードに戻ります。
j
指定した範囲の行を連結して1行にします。行範囲を指定しない場合は、カレント行とその次の行を連結します。
p
指定した範囲の行を表示します。行範囲を指定しない場合は、カレント行を表示します。
n
指定した範囲の行を行番号つきで表示します。行範囲を指定しない場合は、カレント行を表示します。
g/regular/comands
指定した範囲の行のうち、正規表現でregularと一致した文字列のある行に対し、comandsを実行します。行範囲を指定しない場合は、ファイル全体が対象になります。
s/regular/replace/g
指定した範囲の行のうち、正規表現でreplaceと一致した文字列をreplaceに置き換えます。行範囲を指定しない場合は、カレント行のみ置換の対象とします。
H
エラーメッセージの出力有無を指定します。デフォルトでは、エラーメッセージは、出力されません。
P
コマンドモード時に、行頭に * (アスタリスク)が表示されます。編集モードになると * (アスタリスク)が消えます。
w
編集内容を書き込みます。
q
エディタを終了します。

使用例

以下のようなテキストファイルを使って使用例を表示します。

Line01
Line02
Line03
Line04
Line05
Line06
Line07
Line08
Line09
Line10

ファイル全体を表示する。エディタ実行時に表示される数字(ここでは、70)は、ファイルのバイト数を表示しています。

user01@debian:~$ ed sample-file.txt
70
*1,$p
Line01
Line02
Line03
Line04
Line05
Line06
Line07
Line08
Line09
Line10
*

ファイル全体を行番号付きで表示する。

user01@debian:~$ ed sample-file.txt
70
P
*1,$n
1       Line01
2       Line02
3       Line03
4       Line04
5       Line05
6       Line06
7       Line07
8       Line08
9       Line09
10      Line10
*

5行目の後ろに文字列 TEST-LINE を入力する。

user01@debian:~$ ed sample-file.txt
70
P
*5a
TEST-LINE
.
*,n
1       Line01
2       Line02
3       Line03
4       Line04
5       Line05
6       TEST-LINE
7       Line06
8       Line07
9       Line08
10      Line09
11      Line10
*

5行目の前に文字列 TEST-LINE を入力する。

user01@debian:~$ ed sample-file.txt
70
P
*5i
TEST-LINE
.
*,n
1       Line01
2       Line02
3       Line03
4       Line04
5       TEST-LINE
6       Line05
7       Line06
8       Line07
9       Line08
10      Line09
11      Line10
*

正規表現で[27]と一致する文字列がある行を表示する。

user01@debian:~$ ed sample-file.txt
70
P
*1,$g/[27]/p
Line02
Line07
*

正規表現で[27]と一致する文字列がある行の後ろに文字列 ADD-LINE を入力する。複数のコマンドや改行が伴うコマンドの場合は、各行の最後に \ (バックスラッシュ)が必要です。編集後変更を保存し、エディタを終了する。保存時に表示される数字(ここでは、88)は、保存時のファイルのバイト数を表しています。

user01@debian:~$ ed sample-file.txt
70
P
*1,$g/[27]/a\
ADD-LINE\
.
*,n
1       Line01
2       Line02
3       ADD-LINE
4       Line03
5       Line04
6       Line05
7       Line06
8       Line07
9       ADD-LINE
10      Line08
11      Line09
12      Line10
*w
88
*q
user01@debian:~$

6行目から最終行までの 0 を A に置換する。

user01@debian:~$ ed sample-file.txt
70
P
*6,$s/0/A/g
*,n
1       Line01
2       Line02
3       Line03
4       Line04
5       Line05
6       LineA6
7       LineA7
8       LineA8
9       LineA9
10      Line1A
*

シェル内での記述

シェル内実行する場合は、次の用に記述します。ポイントは、 \ (バックスラッシュ)や $ は、シェル内でも特殊文字なので \ (バックスラッシュ)でエスケープする必要があります。

#!bin/bash

cat - | ed list.txt << EOF
1,\$g/[27]/a\\
ADD-LINE\\
.
w
q
EOF
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする