Linux sedコマンド完全ガイド - テキスト置換から複数ファイルの一括修正までマスターする

概要

Linux環境でテキストファイルの内容を素早く正確に置換・編集できる強力なストリームエディタ sed コマンドを紹介します。基本的な文字列置換から特定行の削除、バックアップを作成しながら直接ファイルを修正するインライン(-i)オプションまで、実務で使える実践例を交えて分かりやすく解説します。

1. 実習環境の準備と sed の基本的な文字列置換 (s コマンド)

sed コマンドの実習を安全に行うための専用ディレクトリを作成し、そのディレクトリへ移動するために mkdir -p ~/sed_practice && cd ~/sed_practice コマンドを実行します。

mkdir -p ~/sed_practice && cd ~/sed_practice

文字列置換の実習で使用するサンプルテキストを作成するため、echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt コマンドを実行してファイルに内容を書き込みます。

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

sed コマンドはテキストストリームを加工・編集するストリームエディタです。
s 置換演算子を使用して各行で最初に見つかった apple という文字列を orange に置換し、画面に出力します。
元のファイルである fruits.txt の内容は変更されず、標準出力に結果のみが表示されます。
⚙️ [主要オプション]

-i : 出力結果を画面に表示する代わりに、元のファイルを直接変更して保存します。
-e : 複数の編集スクリプトコマンドを一度に連結して実行します。
-n : パターンスペースの自動出力を抑制し、明示的に指定した行のみを出力します。
-E または -r : 拡張正規表現(ERE)を有効にして使用します。

sed ’s/apple/orange/’ fruits.txt

置換式の末尾に g フラグを付けると、1行の中で一致するすべての対象をグローバル(global)に置換します。
各行に同じ検索対象が複数存在し、漏れなくすべて変更したい場合に使用します。

sed ’s/apple/orange/g’ fruits.txt

2. 特定行の選択出力および行削除 (d および -n オプション)

行の選択と削除の実習に必要なログデータを準備するため、echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log コマンドを実行してサンプルファイルを生成します。

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

-n オプションと p コマンドを組み合わせて、指定した範囲である2行目から3行目までのみを画面に出力します。
デフォルトの自動出力を抑制し、必要な特定の行だけを絞り込んで確認したいときに便利です。

sed -n ‘2,3p’ server.log

d コマンドとパターンマッチングを使用して、Warning という文字列が含まれる行を除外し、残りの内容のみを画面に出力します。
不要なログや特定条件の行をフィルタリングして確認したい場合に使用します。

sed ‘/Warning/d’ server.log

特定の行番号を指定して d コマンドを実行し、2行目を削除した結果を画面に出力します。
指定した行番号の行を取り除き、ファイル内容を確認したい場合に活用します。

sed ‘2d’ server.log

3. 元ファイルの直接変更および自動バックアップ (-i オプション)

設定ファイルの変更実習を行うため、環境変数のサンプルデータが含まれる config.env ファイルを作成します。

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

-i.bak オプションを使用して元のファイルのバックアップである config.env.bak を作成すると同時に、DEBUG=true の設定を DEBUG=false に即座に置換して元ファイルへ上書き保存します。
変更前の状態を安全に保持しながら元ファイルを直接編集したい場合に活用します。

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

cat コマンドで編集した config.env ファイルの内容を確認します。
DEBUG の値が false に正常に変更され、ファイルに反映されていることが確認できます。

cat config.env

自動生成されたバックアップファイルである config.env.bak の内容を出力して確認します。
変更前の元の内容である DEBUG=true の状態がそのまま保持され、安全にバックアップされていることがわかります。

cat config.env.bak

4. 正規表現と区切り文字の変更を活用した高度なテキスト置換

パス置換の実習で使用するファイルパスのサンプルデータを作成するため、echo コマンドで paths.txt ファイルに内容を書き込みます。

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

デフォルトの区切り文字であるスラッシュ(/)の代わりにパイプ(|)記号を置換の区切り文字として使用し、パス内の /usr/local/bin を /usr/bin に安全に置換して出力します。
スラッシュが含まれるファイルパスやURLを扱う際、エスケープ文字(\)を使わずにすっきりと式を記述できます。

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

正規表現を活用した空白除去の実習を行うため、前後に空白が含まれた spaces.txt サンプルファイルを作成します。

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

行頭を意味する ^ 記号と、空白およびタブ文字を指定する [ \t]* 正規表現をマッチングさせて、各行の先頭にある空白をすべて削除して出力します。
ドキュメントやログデータのインデント空白を一括で整理したい場合に役立ちます。

sed ’s/^[ \t]*//’ spaces.txt

ここまで、Linuxの sed コマンドによる基本的なテキスト置換から大量ファイルの一括修正方法まで、核心となる使い方を解説しました。
繰り返しのファイル編集作業を大幅に削減できる強力なツールですので、日々の作業でぜひ活用してみてください。