sed(セド)とは
sedは、テキストストリームを編集するための強力なコマンドラインツールです。その名前は「ストリームエディタ(stream editor)」に由来し、入力されたテキストデータに対し、事前に記述されたスクリプトに基づいて、テキストの変換や抽出などの様々な処理を行います。sedは、テキストファイルを一括で処理する際に特に役立ち、
正規表現を用いた複雑な
パターンマッチングと置換を効率的に実行できます。
sedの基本的な動作
sedは、入力データを1行ずつ読み込み、その行に対してスクリプトに記述された命令を実行します。このプロセスは、入力データの全行に対して繰り返されます。sedスクリプトは、通常、アドレスとコマンドの組み合わせで構成されます。
アドレス: 処理対象の行を指定します。行番号や正規表現パターンを使用できます。アドレスを省略した場合、すべての行が処理対象となります。
コマンド: アドレスで指定された行に対して実行する処理内容を記述します。
例えば、`10 p`というスクリプトは、入力の10行目だけを出力します。
sedは、読み込んだ行を「パターンスペース」と呼ばれる一時的な作業領域に格納し、このパターンスペースの内容に対してスクリプトを順に適用します。スクリプトの実行後、パターンスペースの内容が出力されます。ただし、スクリプト内でデータが削除された場合は、出力は行われません。
sedスクリプトの例
1.
yコマンド: 文字単位の置換を行います。例えば、`y/abc/xyz/` は、`a`を`x`に、`b`を`y`に、`c`を`z`に置換します。
bash
y/
検索文字/置換文字/
2.
sコマンド: 文字列パターンによる置換を行います。
正規表現を使用できます。例えば、`s/old/new/g` は、すべての`old`を`new`に置換します。
bash
s/
検索パターン/置換文字列/g
`g`オプションは、行全体でパターンにマッチするすべての文字列を置換します。`g`を省略した場合、最初に見つかったパターンのみが置換されます。
ホールドスペース
sedには、パターンスペースに加えて、「ホールドスペース」という一時的なバッファ領域があります。これを利用することで、テキストの行の並び替えや、特定パターンの抽出など、より複雑な処理が可能になります。
`g`: パターンスペースの内容をホールドスペースの内容で置き換えます。
`G`: ホールドスペースの内容をパターンスペースの末尾に追加します。
`h`: パターンスペースの内容をホールドスペースにコピーします。
`H`: パターンスペースの内容をホールドスペースの末尾に追加します。
`x`: パターンスペースとホールドスペースの内容を交換します。
コマンドラインでの実行
sedは、コマンドラインから以下のように実行できます。
1. スクリプトを直接指定する: `-e`オプションを使用します。
bash
sed -e 's/検索文字列/置換文字列/g' 入力ファイル > 出力ファイル
2. スクリプトファイルを指定する: `-f`オプションを使用します。
bash
sed -f スクリプトファイル 入力ファイル > 出力ファイル
sedの活用
sedは、以下のようなテキスト処理に活用できます。
プログラムのソースコードやHTMLファイルの一括編集
テキストデータのフォーマット変換
ログファイルからの特定のパターンの抽出
文章中の誤字脱字の一括修正
sedの特徴
sedは非対話型のテキストエディタであり、バッチ処理に適しています。大量のテキストファイルを高速に処理でき、生産性を向上させることができます。また、sedはチューリング完全な言語であることが証明されており、非常に高度なテキスト処理も可能です。
まとめ
sedは、テキスト処理の強力な味方であり、コマンドライン操作に慣れたユーザーにとって、不可欠なツールです。正規表現やスクリプトを効果的に活用することで、様々なテキスト処理を自動化し、効率的な作業環境を構築できます。
関連項目
ed (
テキストエディタ)
AWK
Perl
正規表現
フィルタ (ソフトウェア)