Linuxコマンドsed使い方と3つのオプション

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」に変更されます。

図1. Linuxコマンドsedで各行の最初に登場するHelloをHiに置換
図1. Linuxコマンドsedで各行の最初に登場するHelloをHiに置換

コマンドg(global)

基本のsedコマンドは、1行にある最初に一致するパターンのみを変更します。しかし、1行内のすべての一致するパターンを変更したい場合は、gコマンドを使用する必要があります。

sed 's/元のテキスト/新しいテキスト/g' ファイル名
ShellScript

以下のように最後にgコマンドを使用すると、1行内で「元のテキスト」が複数回登場してもすべて「新しいテキスト」に置き換わります。以下は、example.txtファイル内のすべての「Hello」が「Hi」に置き換えられた例です。

図2. LinuxコマンドsedですべてのHelloをHiに置換
図2. LinuxコマンドsedですべてのHelloをHiに置換

sedで使用できる主要オプション

sedコマンドは非常に強力な機能を持っており、さまざまなオプションを提供します。ここでは、よく使用されるいくつかのオプションを紹介します。

-iオプション(in-place)

通常、sedは元のファイルを修正せず、変更された結果を出力します。しかし、-iオプションを使用すると、元のファイル自体を修正できます。

sed -i 's/元のテキスト/新しいテキスト/' ファイル名
ShellScript

このコマンドは、元のファイルで「元のテキスト」を「新しいテキスト」に直接置き換えます。-iオプションを使用する場合、ファイルが即座に変更されるため、事前にバックアップを取ることをお勧めします。

図3. Linuxコマンドsed -iオプションで元のファイルの文字列を直接変更
図3. Linuxコマンドsed -iオプションで元のファイルの文字列を直接変更

-nオプション(silent)

sedコマンドは通常、ファイルの実行結果をすべて出力します。しかし、-nオプションを使用すると、p(print)コマンドを使用した部分のみを出力するように制御できます。

sed -n 's/元のテキスト/新しいテキスト/p' ファイル名
ShellScript

-nオプションのみを使用する場合は、変更した内容を出力しません。しかし、pコマンドと一緒に使用すると、「元のテキスト」を「新しいテキスト」に置き換えた行だけを出力します。

図4. Linuxコマンドsed -nオプションとpコマンドで変更された内容のみを出力
図4. Linuxコマンドsed -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つであり、複雑なパターンマッチングを簡単に行うことができます。

図5. Linuxコマンドsedと正規表現を使用してすべての数字を#に置換
図5. Linuxコマンドsedと正規表現を使用してすべての数字を#に置換

ファイルバックアップと共に修正

-iオプションを使用する際、元のファイルをバックアップしながら修正するには、拡張子を指定してバックアップファイルを作成できます。

sed -i.bak 's/元のテキスト/新しいテキスト/' ファイル名
ShellScript

このコマンドは、ファイルを修正する前に「ファイル名.bak」というバックアップファイルを生成します。重要なファイルを修正する際にデータを失わないよう、バックアップを推奨します。次のように元のファイル名の後に「.bak」が付き、元のファイルがバックアップとして保存されます。

図6. Linuxコマンドsed -i.bakオプションを使用してバックアップファイルを作成
図6. Linuxコマンドsed -i.bakオプションを使用してバックアップファイルを作成

sed使用時の注意事項

  • ファイル修正時はバックアップを推奨: -iオプションでファイルを直接修正する場合は、必ずバックアップを作成しましょう。sedコマンドは一度実行されると元に戻すことが難しいため、重要なデータを扱う際は注意が必要です。
  • 正規表現の注意: sedで正規表現を使用する際は、パターンが意図通りに動作するか常に確認してください。特に、特殊文字(例: 「.」や「*」)は正規表現で特別な意味を持つため、これらをそのまま文字として認識させたい場合は、「\」を使用する必要があります。
  • 他のコマンドと組み合わせて使用: sedは単独で使用するのも良いですが、grepやawkなどの他のコマンドと組み合わせて、より強力なスクリプトを作成することができます。

まとめ

Linuxコマンドsedは、Linuxでファイルを修正したり、テキストデータを処理したりする際に非常に強力なツールです。簡単なテキスト置換から、正規表現を使用した複雑な変換まで、幅広く利用可能です。今回は基本的な使い方と3つの主要オプションを紹介しましたが、実際に手を動かしながら練習することで、sedの力をさらに実感できるでしょう。

また、バックアップを通じてデータを安全に保存する習慣を身につけ、sedコマンドを他のユーティリティと組み合わせて、より強力な自動化スクリプトを作成してみてください。sedは、テキストファイルを扱うほぼすべてのLinux作業において重要なツールとなるでしょう。

リファレンス

関連ポスト

コメントする