sed(セド)とは | 意味や読み方など丁寧でわかりやすい用語解説
sed(セド)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
セド (セド)
英語表記
sed (セド)
用語解説
sedは「Stream EDitor」の略で、テキストファイルを一行ずつ読み込み、指定された編集コマンド(スクリプト)に基づいて加工・変換し、結果を標準出力に出力する非対話型のエディタだ。システム管理や開発の現場で、大量のテキストデータやログファイル、設定ファイルなどを自動的に処理する際に非常に強力なツールとして活用されている。sedは主にUNIX系OSに標準搭載されており、シェルスクリプトなどと組み合わせて使うことで、複雑なテキスト処理も効率的に実行できる。元のファイルを直接変更せずに出力結果を生成することがデフォルトの動作であり、誤操作によるデータ損失のリスクが低い点も特徴の一つだ。
sedの基本的な使用方法は sed [オプション] 'スクリプト' [ファイル...] という形式をとる。ファイル名を指定しない場合、sedは標準入力からテキストを読み込み、処理結果を標準出力に返す。スクリプトとは、テキストに対してどのような操作を行うかを記述した命令群で、通常はシングルクォーテーションで囲んで指定する。これにより、シェルがスクリプト内の特殊文字を解釈するのを防ぐ。
スクリプトは基本的に [アドレス][コマンド] という構造を持つ。アドレスは処理の対象となる行を指定し、コマンドはその行に対してどのような操作を行うかを指示する。アドレスを省略した場合、スクリプト内のコマンドは全ての行に適用される。
アドレスの指定方法にはいくつか種類がある。
特定の行番号を指定する場合、例えば 5p は5行目のみを処理対象とし、p コマンドによってその行を出力する。
行の範囲を指定する場合、5,10d のようにコンマで区切って範囲を指定すると、5行目から10行目までの行を処理対象とし、d コマンドでそれらの行を削除する。
さらに強力なのは正規表現を使ったアドレス指定だ。/pattern/ のようにスラッシュで正規表現を囲むと、その正規表現にマッチする行のみを処理対象とする。例えば /error/p は「error」という文字列を含む行だけを出力する。/start/,/end/d のように正規表現の範囲指定も可能で、「start」という文字列を含む行から「end」という文字列を含む行までの範囲を削除する、といった複雑な処理も記述できる。
sedで利用できる主なコマンドは次の通りだ。
p (print) コマンドは、指定された行を標準出力に出力する。sedはスクリプトで特に指定しない限り、全ての行を標準出力に出力するが、p コマンドを使うことで特定の行のみを繰り返し出力したり、他のコマンドと組み合わせて利用したりする。
d (delete) コマンドは、指定された行を削除する。これは、削除された行を標準出力に出力しないことを意味する。
s (substitute) コマンドは、sedの最も強力で頻繁に利用される機能の一つで、指定されたパターンを別の文字列に置換する。その形式は s/正規表現/置換文字列/フラグ となる。
正規表現 の部分にはマッチさせたいパターンを記述し、置換文字列 にはパターンがマッチした箇所を置き換えたい文字列を指定する。
フラグ は置換動作を制御するためのオプションで、以下のようなものがある。
g (global): マッチした全てのパターンを置換する。フラグがなければ、各行で最初にマッチしたパターンのみが置換される。
i (ignore-case): 大文字と小文字を区別せずにパターンマッチを行う。
p (print): 置換が行われた行を標準出力に出力する。
w ファイル名: 置換が行われた行を、指定されたファイルに書き出す。
例えば、s/old_text/new_text/g は全ての行において、「old_text」という文字列を「new_text」に全て置換する。
他にも、
a (append) コマンドは、現在の行の後に指定した文字列を追加する。複数行を追加する場合は、各行の前にバックスラッシュを置く。
i (insert) コマンドは、現在の行の前に指定した文字列を挿入する。
c (change) コマンドは、現在の行を指定した文字列で置き換える。
sedは、内部的にパターンバッファと呼ばれる領域を持ち、入力された行をそこに格納してスクリプトを適用する。スクリプトの実行が完了すると、パターンバッファの内容を標準出力に書き出し、次の行の処理へと移る。この「一行ずつ処理する」というストリーム処理の特性により、非常に大きなファイルでも効率的に処理できる。
デフォルトでは元のファイルは変更されないが、一部のsed実装では -i オプションを使うことでファイルを直接編集(インプレース編集)することが可能だ。-i.bak のように拡張子を指定すると、元のファイルのバックアップが作成される。
sedの活用例は多岐にわたる。例えば、ログファイルから特定のエラーメッセージだけを抽出し、その日付形式を変換する、設定ファイル内の特定のパラメータの値を一括で変更する、CSVファイルから不要な列を削除したり、区切り文字を別のものに変換したりする、HTMLやXMLファイルから特定のタグや属性を削除する、といった作業が挙げられる。
sedは、同じテキスト処理ツールである grep や awk と比較されることも多い。grep が主にテキストの検索と抽出に特化しているのに対し、sedは検索・抽出に加えて文字列の置換や行の追加・削除といった「加工・変換」機能に優れる。awk はよりプログラミング言語に近い機能を持つため、複雑なデータ処理や集計作業に向いている。sedはこれらのツールの中でも、シンプルながら強力なテキスト加工に特化したツールとして、システムエンジニアが日常的に活用する基本的なコマンドの一つと言えるだろう。