ホーム > テキスト処理・検索 > sed

sed: ストリームエディタによるテキスト変換

sed (stream editor) は、テキストストリームをフィルタリングおよび変換するための強力なコマンドラインユーティリティです。ファイルやパイプを通じて渡されたテキストに対して正規表現を使用して様々な編集作業を実行できます。特に `-e` オプションを使用すると、複数の編集コマンドを順次適用できるため、複雑なテキスト処理タスクに役立ちます。

概要

sed は、入力ストリーム(ファイルまたは標準入力)からテキストを読み込み、編集コマンドを適用した後、結果を標準出力に出力する非対話型テキストエディタです。主にテキストファイル内の特定のパターンを検索・置換したり、行を削除したり、挿入したりするなどの作業を自動化するために使用されます。`-e` オプションは、複数の `sed` コマンドを一度に実行できるようにするため、スクリプトファイルを作成せずに複雑な作業を実行できます。

主な機能

  • 正規表現を使用した強力なパターンマッチングと置換
  • ファイル内容の選択的な削除、挿入、変更
  • 複数の編集コマンドを一度に適用可能 (`-e` オプション)
  • 非破壊的編集(デフォルトでは元のファイルは変更されません)

主なオプション

sed コマンドのコア機能を制御する主要なオプションです。

スクリプト/コマンド指定

出力/処理方法

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`sed` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

sed コマンドと `-e` オプションを活用した実際の使用例です。

単一コマンドでテキスト置換

echo "I like apple." | sed -e 's/apple/orange/'

ファイル内の 'apple' を 'orange' に置換します。

複数の -e オプションで複数コマンド実行

echo "I like apple." | sed -e 's/apple/orange/' -e 's/like/love/'

1行で 'apple' を 'orange' に置き換え、'like' を 'love' に置き換えます。

セミコロンで複数コマンドを区切る

echo "I like apple." | sed -e 's/apple/orange/; s/like/love/'

上記と同じ作業をセミコロンで区切って実行します。

特定の行を削除および置換

cat <<EOF > test.txt
Log entry 1: info
Log entry 2: warning
Log entry 3: error
Log entry 4: debug
EOF
sed -e '/error/d' -e 's/warning/notice/' test.txt
rm test.txt

ファイルから 'error' を含む行を削除し、'warning' を 'notice' に置換します。

ファイル内直接編集 (-i オプション)

echo "This is old_text." > my_file.txt
sed -i.bak -e 's/old_text/new_text/' my_file.txt
cat my_file.txt
cat my_file.txt.bak
rm my_file.txt my_file.txt.bak

元のファイルの 'old_text' を 'new_text' に直接変更し、バックアップファイルを作成します。

特定のパターンを含む行のみ出力 (-n および p コマンド)

echo -e "banana\napple\norange" | sed -n -e '/apple/p'

'apple' を含む行のみを出力します。

ヒント & 注意事項

sed 使用時の役立つヒントと注意すべき点です。

正規表現の活用

  • sed は強力な正規表現 (Regular Expression) をサポートしています。複雑なパターンマッチングや置換のために、正規表現の構文を習得することが重要です。
  • デフォルトでは BRE (Basic Regular Expression) を使用しますが、`-r` (または `--regexp-extended`) オプションを使用すると ERE (Extended Regular Expression) を使用でき、より便利です。

引用符の使用

  • sed コマンドはシェルによって解釈される可能性があるため、特殊文字が含まれるスクリプトはシングルクォート ('...') で囲み、シェルの展開を防ぐことをお勧めします。変数を指定する必要がある場合はダブルクォート ("...") を使用しますが、内部の特殊文字はバックスラッシュでエスケープする必要があります。

バックアップの重要性 (-i オプション使用時)

  • `-i` オプションでファイルを直接編集する際は、常にバックアップを作成する習慣をつけましょう(例: `sed -i.bak 's/old/new/' file.txt`)。予期せぬ結果で元のファイルが破損することを防ぐことができます。

まずテストする

  • 複雑な sed スクリプトを実際のファイルに適用する前に、小さなテストファイルや `echo` コマンドを使用して結果を事前に確認することをお勧めします。

同じカテゴリのコマンド