このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:ストリームエディタ:sedコマンド

ストリームエディタ:sedコマンド
sed
コマンドは、Linux環境でのテキスト操作に特化した非対話型エディタで、主にテキストデータを加工・編集するために使用されます。sed
の名称は「Stream Editor」の略であり、ファイルの内容を直接対話的に編集するのではなく、コマンドラインから指示した編集内容を適用し、その結果を出力します。

非対話型エディタとは
sed
というコマンド名は「Stream Editor」の略で、その名の通りテキストストリームを編集するためのエディタです。しかし、sed
は非対話型エディタであり、Windowsのメモ帳やLinuxのviエディタなどの一般的な対話型エディタとは大きく異なります。
対話型エディタとは
対話型エディタを利用する際の一般的な流れは以下の通りです。
ファイル → バッファに読み込み → 編集してファイル保存
- ファイルを開く:エディタで編集したいファイルを開きます。
- バッファに読み込む:ファイルの内容がメモリ上のバッファに読み込まれます。
- 編集する:ユーザーが直接ファイルの内容を編集します。
- ファイルを保存する:編集内容を上書き保存します。
非対話型エディタ:sedの特徴
一方、sed
は非対話型エディタであり、その動作は次のようになります。
- コマンドを指定して実行:シェルから編集のためのコマンド(スクリプト)を引数として与えて、
sed
コマンドを実行します。 - 編集操作を行う:
sed
は指定された編集コマンドに従って、テキストの編集操作を行います。 - 結果を出力する:編集後のテキストを標準出力に出力します。
このように、sed
は非対話型でフィルタとして動作し、特定のパターンに基づいた編集を効率的に行うことができます。また、正規表現を利用できるため、柔軟な編集パターンの定義が可能です。
ポイント
sed
コマンドは編集結果を標準出力に出力するため、元のファイルは変更されません。そのため、ファイルを壊す心配をせずに試すことができます。- 編集対象ファイルの指定がない場合、
sed
は標準入力からデータを読み込みます。これにより、パイプを使って他のコマンドの出力結果を編集することも可能です。
sedコマンドの形式
【書式】sed [オプション] '<スクリプト>' <対象ファイル>
[オプション]
:コマンドの動作を変更するためのオプション。'<スクリプト>'
:編集内容を指定するスクリプト。アドレスとコマンドを組み合わせたもの。<対象ファイル>
:編集対象のファイル。
スクリプトの構成
- アドレス:編集を適用する行を指定します。省略すると全行が対象になります。
- コマンド:実行する編集操作を指定します。必要に応じて引数やフラグを取ります。
sedコマンドの実行例
例1: $ sed '1,5d' sample.txt
例2: $ sed 's/aaa/bbb/g' sample.txt
sed
コマンドの実行例を項目ごとに整理すると下表のようになります。
No | スクリプト | アドレス | コマンド | 引数 | フラグ | 対象ファイル |
---|---|---|---|---|---|---|
例1 | '1,5d' | 1,5 | d | - | - | sample.txt |
例2 | 's/aaa/bbb/g' | 省略 | s | /aaa/bbb/ | g | sample.txt |
例1の解説:指定した行を削除する
例1: $ sed '1,5d' sample.txt
このコマンドは、sample.txt
の1行目から5行目を削除し、その結果を標準出力に出力します。元のファイルは変更されません。
項目 | 内容 |
---|---|
スクリプト | '1,5d' |
アドレス | 1,5 (1行目から5行目まで) |
コマンド | d (指定された行を削除する) |
引数 | なし |
フラグ | なし |
対象ファイル | sample.txt |
例2の解説:文字列を置換する
例2: $ sed 's/aaa/bbb/g' sample.txt
このコマンドは、sample.txt
内のすべての行でaaa
をbbb
に置き換え、その結果を標準出力に出力します。元のファイルは変更されません。
項目 | 内容 |
---|---|
スクリプト | 's/aaa/bbb/g' |
アドレス | 省略(全行が対象) |
コマンド | s (置換を行う) |
引数 | /aaa/bbb/ (aaa をbbb に置換) |
フラグ | g (行内のすべての一致部分を置換。無ければ最初の1つだけ置換) |
対象ファイル | sample.txt |
よく使われるsedコマンド
sed
では多くのコマンドが利用できますが、特によく使われるのは以下の3つです。
d
:行を削除する。p
:行を表示する。s
:文字列を置換する。
サンプルファイルとsedコマンドの例
まず、サンプルファイルを作成します。
user01@ubuntu:~$ nano sample.txt
sample.txt
の内容
01 Cl
02 Col
03 Cool
04 Coool
05 Cooool
06 Coooool
07 Cooooool!!!
08 CoolCool
09 CoolCoolCool
10 Japan Cool
11 Japan Hot
12 America Cool
13 America Hot
例1:特定の行を削除する
このコマンドは、sample.txt
の4行目から6行目(Coool
、Cooool
、Coooool
)を削除し、その結果を標準出力に出力します。
user01@ubuntu:~$ sed '4,6d' sample.txt
解説
項目 | 内容 |
---|---|
スクリプト | '4,6d' |
アドレス | 4,6 (4行目から6行目まで) |
コマンド | d (指定された行を削除する) |
引数 | なし |
フラグ | なし |
対象ファイル | sample.txt |
実行結果
01 Cl
02 Col
03 Cool
07 Cooooool!!!
08 CoolCool
09 CoolCoolCool
10 Japan Cool
11 Japan Hot
12 America Cool
13 America Hot
例2:文字列を置換する
user01@ubuntu:~$ sed 's/Cool/Hot/g' sample.txt
解説
項目 | 内容 |
---|---|
スクリプト | 's/Cool/Hot/g' |
アドレス | 省略(全行が対象) |
コマンド | s (置換を行う) |
引数 | /Cool/Hot/ (Cool をHot に置換) |
フラグ | g (行内のすべての一致部分を置換) |
対象ファイル | sample.txt |
このコマンドは、sample.txt
内のすべてのCool
をHot
に置き換え、その結果を標準出力に出力します。
実行結果
01 Cl
02 Col
03 Hot
04 Coool
05 Cooool
06 Coooool
07 Cooooool!!!
08 HotHot
09 HotHotHot
10 Japan Hot
11 Japan Hot
12 America Hot
13 America Hot
不要なファイルの削除
作業が完了したら、作成したファイルを削除します。
user01@ubuntu:~$ rm sample.txt
まとめ
sed
は非対話型のストリームエディタで、コマンドライン上でテキストの編集を効率的に行えます。- 元のファイルを変更せずに編集結果を標準出力に出力するため、安全に試すことができます。
- 正規表現を活用でき、柔軟な編集パターンを定義できます。
- よく使われるコマンドは、行を削除する
d
、行を表示するp
、文字列を置換するs
の3つです。 sed
を使いこなすことで、定型的なテキスト処理を自動化し、作業効率を大幅に向上させることができます。
sed
コマンドは非対話型エディタとして、パターン化されたテキストの置換や削除などの操作に特化しており、スクリプトを用いることで自動的かつ柔軟に処理を行うことができます。対話的なエディタとは異なり、標準出力に結果を出力するため、元ファイルを変更することなく編集内容を確認することができます。また、正規表現を利用できるため、複雑な文字列操作や抽出にも適しています。