sed
(ストリームエディタ)は、LinuxやUnix系のシステムで非常に強力なテキスト操作ツールです。主に、ファイル内のテキストを編集、置換、削除、追加するために使用されます。このツールは、シンプルながらも複雑なテキスト編集を自動化できるため、システム管理者や開発者にとって欠かせないツールとなっています。
sed
の基本的な使い方
sed
は、コマンドラインで動作し、パイプ(|
)を使って他のコマンドと組み合わせて使用することができます。最も基本的なsed
のコマンドの構文は以下の通りです。
nginxsed 'コマンド' ファイル名
ここで、「コマンド」はsed
に実行させる処理を示し、「ファイル名」は編集対象のファイルです。
例1: ファイルの内容を表示する
sed
を使って、指定したファイルの内容をそのまま表示することもできます。特にオプションを指定せずに実行すると、入力ファイルの内容がそのまま標準出力に出力されます。
nginxsed '' ファイル名
例2: 特定の行を表示する
sed
を使って特定の行だけを表示することも可能です。たとえば、1行目だけを表示したい場合、以下のように指定します。
nginxsed -n '1p' ファイル名
置換操作
sed
の最もよく使用される機能は、テキストの置換です。s
コマンドを使って、文字列を検索して置き換えることができます。基本構文は次の通りです。
nginxsed 's/検索文字列/置換文字列/' ファイル名
例3: 文字列の置換
たとえば、example.txt
というファイル内の「apple」という文字列を「orange」に置き換える場合、以下のように実行します。
nginxsed 's/apple/orange/' example.txt
このコマンドは、「apple」という文字列を見つけて「orange」に置き換えますが、最初に見つかった1回だけを置き換えます。
例4: すべての一致する文字列を置換
ファイル内のすべての「apple」を「orange」に置き換えるには、g
(グローバル)オプションを使用します。
nginxsed 's/apple/orange/g' example.txt
これにより、ファイル内の「apple」がすべて「orange」に置き換えられます。
例5: 置換をファイルに直接書き込む
sed
コマンドの結果を直接ファイルに反映させたい場合、-i
オプションを使用します。これにより、ファイルの内容が直接変更されます。
nginxsed -i 's/apple/orange/g' example.txt
削除操作
sed
を使用して、テキスト内の行を削除することもできます。行を削除する場合は、d
コマンドを使います。
例6: 特定の行を削除
たとえば、3行目を削除したい場合は以下のように実行します。
nginxsed '3d' example.txt
このコマンドは、3行目を削除します。
例7: 条件に一致する行を削除
特定の文字列を含む行を削除したい場合は、/パターン/d
という構文を使用します。
nginxsed '/apple/d' example.txt
これにより、「apple」を含む行が削除されます。
挿入と追加操作
sed
では、テキストの挿入や追加も行うことができます。これを行うには、i
(挿入)またはa
(追加)コマンドを使用します。
例8: 特定の行の前にテキストを挿入
たとえば、2行目の前に「Hello, world!」というテキストを挿入したい場合は、次のように実行します。
nginxsed '2i Hello, world!' example.txt
例9: 特定の行の後にテキストを追加
同じく、3行目の後にテキストを追加したい場合は、以下のようにします。
vbnetsed '3a This is a new line.' example.txt
複雑な操作と正規表現
sed
では、正規表現を使ってさらに複雑なパターンを検索・置換することができます。たとえば、数字や特定の文字列を扱う際に役立ちます。
例10: 数字の前にテキストを追加
ファイル内のすべての数字の前に「数字: 」を追加する場合、次のように正規表現を使います。
nginxsed 's/[0-9]/数字: &/' example.txt
このコマンドは、数字の前に「数字: 」という文字列を追加します。
sed
の実行結果を確認する
sed
コマンドはデフォルトで標準出力に結果を表示しますが、ファイルを変更するわけではありません。変更を直接ファイルに反映させたい場合は、前述のように-i
オプションを使用します。
また、変更内容を確認するために、変更前と変更後を比較したい場合は、diff
コマンドなどを利用して比較することができます。
sed
の便利な活用法
- 複数の操作を一度に実行: 複数の
sed
コマンドをセミコロンで区切って一度に実行することができます。
swiftsed 's/apple/orange/; s/banana/grape/' example.txt
- ファイル全体で処理を繰り返す: 複数のファイルに対して一括で
sed
操作を行いたい場合は、-i
オプションとともにファイルを指定することができます。
nginxsed -i 's/apple/orange/g' *.txt
- 置換パターンに変数を使う: スクリプト内で変数を使って置換パターンを動的に変更することもできます。
bashpattern="apple"
sed "s/$pattern/orange/" example.txt
終わりに
sed
は、シンプルなテキスト置換から、複雑なファイル操作まで幅広い用途に対応しています。使いこなすことで、ファイル操作やデータ処理の効率が大幅に向上します。特に大量のデータを一括で処理したい場合や、スクリプト内で自動化を図りたい場合には、非常に有効なツールとなります。