Linuxコマンド集
コマンド集(機能別) | コマンド集(アルファベット順) | コマンド逆引き大全 | シェル・スクリプト・リファンレス

sed  文字列の置換,行の削除を行う (1)

 構文  
sed (オプション) [対象ファイル]

 オプション  
-e スクリプト名 指定したスクリプト(条件式)で変換処理を行う
-f ファイル名 指定したファイルに記述されているコマンドやスクリプトに従って処理を行う
r 指定したファイルに記述されているコマンドやスクリプトに従って処理を行う

 説明  

sedは与えられた文字列を,ルールに従って変換するコマンドだ。例えば,文字列の置換,行の削除といった処理が行える。

変換に利用できるルールには下表「sedの条件式」のような条件式が利用できる。例えば,文字列を挿入したい場合は「a」や「i」の後に挿入する文字列を指定する。文字列を置換したい場合は「s/置換ルール/置換文字/」と実行する。

置換ルールの最初に数値を指定すると,指定した行のみが処理される。例えば,「3d」と指定すると,3行目が削除される。

sedコマンドで実際に変換を行う場合は,変換処理内容は「-e」オプションを指定した後に記述する。また,sedコマンドに指定したファイルの内容を処理する。例えば,source.txt内のLinuxをリナックスに置換したい場合は,次のように実行する。

$ sed -e "s/Linux/リナックス/g" source.txt

結果は標準出力(ディスプレイ)に表示される。もし,ファイルに保存したい場合は出力のリダイレクト(пjを利用する。

また,「-f」オプションで変換手順を記載したスクリプト・ファイルを指定できる。指定したファイルの内容に従って処理される。


 用語  

【パターン・スペースとホールド・スペース】

sedでは処理を行う対象の文字列を一時的に保存しておく必要がある。この保存スペースのことをパターン・スペースと呼ぶ。例えば1行目を処理するときには,1行目の内容がパターン・スペースに保存される。その後,パターン・スペースにある文字列に対して置換などの処理が行われる。

一方のホールド・スペースは,パターン・スペースのサブとして使われる保存領域だ。例えば,パターン・スペースにある文字列を後の処理で利用したい場合などは,一度ホールド・スペースに移動しておく。他の処理を行った後に,ホールド・スペースからパターン・スペースに戻せば,以前の処理の続きが行える。

パターン・スペースの文字列をホールド・スペースにコピーする場合は「h」,ホールド・スペースの文字列をパターン・スペースにコピーする場合は「g」,パターン・スペースとホールド・スペースを入れ替える場合は「x」を実行すればよい。


 sedの条件式  
行数 処理する行数を指定する
行数,行数 指定した行数間の文字列を処理する。$を指定すると最後の行を表せる
/文字列/ 指定した文字列が現れる行を処理する。先頭に「^」を付けると指定した文字列から始まる行,末尾に「$」を付けると指定した文字列で終わる行が対象になる。行数の範囲指定でも利用できる
:ラベル bおよびtコマンド用のラベル
#コメント コメント
{..} 括弧(かっこ)内をブロックとして扱う
= 現在の行番号を表示する
a 文字列 文字列を追加する。ただし改行をしたい場合はその前に\を付ける
i 文字列 文字列を挿入する。ただし改行をしたい場合はその前に\を付ける
q 処理を中断しsedを終了する
r ファイル名 指定したファイルを読み出し,追加する
b ラベル 指定したラベルに移動する
t ラベル s///が成功していれば指定したラベルに移動する
c 文字列 選択している行を文字列に置換する。ただし改行をしたい場合はその前に\を付ける
d パターン・スペースを削除する
D パターン・スペース内の最初の改行までを削除する
h パターン・スペースをホールド・スペースにコピーする
H パターン・スペースをホールド・スペースに追加する
g ホールド・スペースをパターン・スペースにコピーする
G ホールド・スペースをパターン・スペースに追加する
x ホールド・スペースとパターン・スペースを入れ替える
n 次の行をパターン・スペースに読み込む
N 次の行をパターン・スペースに追加する
p 現在のパターン・スペースを表示する
P 現在のパターン・スペースの最初に現われる改行までを表示する
w ファイル名 現在のパターン・スペースを指定したファイルに書き込む
s/置換条件/置換文字/ 置換条件を置換文字に変換する。最後にgを付けた場合は置換条件に当てはまるすべての文字列が置換される
y/変換対象の文字/変換文字/ 変換対象の文字を変換文字に変換する

 使用例  
テキスト・ファイルの5~10行目を削除する
$ sed -e "5,10d" source.txt 

テキスト・ファイル内の「Nikkei Linux」を「日経Linux」に変換する
$ sed -e "s/Nikkei Linux/日経Linux/g" source.txt 

「Error」がある行に,「### Check Line ###」という新しい行を追加する
$ $ sed -e "/Error/i #### Check Line ###" source.txt 

 関連事項  
trsort文字列を置換するどのような正規表現があるのか