Linuxコマンドsedは「Stream Editor」の略で、テキストストリームを読み取り、特定のパターンを探して変換または修正するために使用されます。主に大量のテキストファイルを扱う作業に効率的に使用できるため、開発者やシステム管理者にとって必須のツールです。今回の投稿では、sedコマンドの基本的な使い方と主要なオプションについて見ていきましょう。
目次
Linuxコマンドsedの基本構造
sedコマンドは基本的に以下の形式で使用されます:
sed [オプション] 'コマンド' ファイル名
ShellScriptここでオプションは任意で、コマンドはsedが実行する操作を定義します。主に使用されるコマンドはs
(substitute、置換)で、特定のテキストパターンを見つけて他のテキストに置き換える役割を果たします。
テキスト置換
sed 's/元のテキスト/新しいテキスト/' ファイル名
ShellScriptこのコマンドは、ファイル内の「元のテキスト」を「新しいテキスト」に置き換えます。ファイル内に「元のテキスト」が複数回出現する場合、デフォルトでは各行の最初に一致するテキストだけが置換されます。
Hello, Jacob! Hello, Mary!
Hello, Jemma! Hello, Davidson!
Hello, John! Hello, Jack!
Plaintext「Hello」を「Hi」に置換するには、s/Hello/Hi/
と入力すると、次のように各行で最初に登場する「Hello」が「Hi」に変更されます。
コマンドg(global)
基本のsedコマンドは、1行にある最初に一致するパターンのみを変更します。しかし、1行内のすべての一致するパターンを変更したい場合は、gコマンドを使用する必要があります。
sed 's/元のテキスト/新しいテキスト/g' ファイル名
ShellScript以下のように最後にgコマンドを使用すると、1行内で「元のテキスト」が複数回登場してもすべて「新しいテキスト」に置き換わります。以下は、example.txtファイル内のすべての「Hello」が「Hi」に置き換えられた例です。
sedで使用できる主要オプション
sedコマンドは非常に強力な機能を持っており、さまざまなオプションを提供します。ここでは、よく使用されるいくつかのオプションを紹介します。
-iオプション(in-place)
通常、sedは元のファイルを修正せず、変更された結果を出力します。しかし、-i
オプションを使用すると、元のファイル自体を修正できます。
sed -i 's/元のテキスト/新しいテキスト/' ファイル名
ShellScriptこのコマンドは、元のファイルで「元のテキスト」を「新しいテキスト」に直接置き換えます。-i
オプションを使用する場合、ファイルが即座に変更されるため、事前にバックアップを取ることをお勧めします。
-nオプション(silent)
sedコマンドは通常、ファイルの実行結果をすべて出力します。しかし、-n
オプションを使用すると、p
(print)コマンドを使用した部分のみを出力するように制御できます。
sed -n 's/元のテキスト/新しいテキスト/p' ファイル名
ShellScript-n
オプションのみを使用する場合は、変更した内容を出力しません。しかし、p
コマンドと一緒に使用すると、「元のテキスト」を「新しいテキスト」に置き換えた行だけを出力します。
-eオプション(multi-command)
sedを使用して一度に複数の操作を実行する場合は、-e
オプションを使用します。
sed -e 's/テキスト1/テキスト2/' -e 's/テキスト3/テキスト4/' ファイル名
ShellScriptこのコマンドは、最初に「テキスト1」を「テキスト2」に置き換え、その後に「テキスト3」を「テキスト4」に置き換えます。複数のコマンドを順番に実行する際に便利です。
実戦応用例
特定の行のみを修正
テキストファイル内の特定の行だけを修正したい場合は、行番号を指定できます。
sed '2s/元のテキスト/新しいテキスト/' ファイル名
ShellScriptこのコマンドは、ファイルの2行目で「元のテキスト」を「新しいテキスト」に変更します。行番号を指定することで、大量のファイルの特定部分のみを簡単に修正できます。
正規表現を使用する
sedは正規表現をサポートしているため、パターンをより柔軟に設定できます。例えば、数字だけを見つけて変更したい場合、次のように使用できます。
sed 's/[0-9]/#/g' ファイル名
ShellScriptこのコマンドは、ファイル内のすべての数字を「#」に置き換えます。正規表現はsedの強力な機能の1つであり、複雑なパターンマッチングを簡単に行うことができます。
ファイルバックアップと共に修正
-i
オプションを使用する際、元のファイルをバックアップしながら修正するには、拡張子を指定してバックアップファイルを作成できます。
sed -i.bak 's/元のテキスト/新しいテキスト/' ファイル名
ShellScriptこのコマンドは、ファイルを修正する前に「ファイル名.bak」というバックアップファイルを生成します。重要なファイルを修正する際にデータを失わないよう、バックアップを推奨します。次のように元のファイル名の後に「.bak」が付き、元のファイルがバックアップとして保存されます。
sed使用時の注意事項
- ファイル修正時はバックアップを推奨:
-i
オプションでファイルを直接修正する場合は、必ずバックアップを作成しましょう。sedコマンドは一度実行されると元に戻すことが難しいため、重要なデータを扱う際は注意が必要です。 - 正規表現の注意: sedで正規表現を使用する際は、パターンが意図通りに動作するか常に確認してください。特に、特殊文字(例: 「.」や「*」)は正規表現で特別な意味を持つため、これらをそのまま文字として認識させたい場合は、「\」を使用する必要があります。
- 他のコマンドと組み合わせて使用: sedは単独で使用するのも良いですが、grepやawkなどの他のコマンドと組み合わせて、より強力なスクリプトを作成することができます。
まとめ
Linuxコマンドsedは、Linuxでファイルを修正したり、テキストデータを処理したりする際に非常に強力なツールです。簡単なテキスト置換から、正規表現を使用した複雑な変換まで、幅広く利用可能です。今回は基本的な使い方と3つの主要オプションを紹介しましたが、実際に手を動かしながら練習することで、sedの力をさらに実感できるでしょう。
また、バックアップを通じてデータを安全に保存する習慣を身につけ、sedコマンドを他のユーティリティと組み合わせて、より強力な自動化スクリプトを作成してみてください。sedは、テキストファイルを扱うほぼすべてのLinux作業において重要なツールとなるでしょう。