sedコマンドの使い方:ストリーム上でテキストを編集する

sedは、テキストを1行ずつ読み込んで、置換・削除・抽出などの編集を行うコマンドです。設定ファイルの一括置換や、ログの加工など、ファイルを開かずに文字列を書き換えたいときに使います。

sedのよく使う形

実務や学習で登場しやすい使い方を、そのまま入力できる形でまとめました。

コマンド例内容
sed 's/old/new/' file各行の最初の「old」を「new」に置換して表示
sed 's/old/new/g' file各行のすべての「old」を置換
sed -i.bak 's/old/new/g' fileバックアップ(file.bak)を残してファイルを直接書き換え
sed -n '5,10p' file5〜10行目だけを表示
sed '/^#/d' fileコメント行(#で始まる行)を削除して表示
sed -e 's/a/b/' -e 's/c/d/' file複数の編集をまとめて指定

sedの主なオプション

オプション意味
s/対象/置換後/ 置換
g 全置換
-iファイルを直接書き換え
-e複数の編集コマンドを指定
-n明示的にpしない限り出力しない
d 該当行を削除

sedの実行例と結果の読み方

user@linux-study:~$ sed 's/foo/bar/g' sample.txt
bar bar bar

sed 's/foo/bar/g'で、sample.txtの中の"foo"という文字列をすべて"bar"に置換した結果を表示しています。ファイル自体は変更されず、-iオプションを付けるとファイルを直接書き換えられます。

練習用ターミナルでは、sedをブラウザ上で安全に試せます。

sedを使うときの注意点

-iはファイルを直接書き換えるため、元に戻せません。まず-iなしで結果を確認するか、-i.bakでバックアップを残してから実行しましょう。

置換する文字列に/が含まれる場合は、s#/usr/local#/opt#のように区切り文字を別の記号に変えると読みやすくなります。

sedに関するよくある質問

特定の行だけ置換するには?

sed '3s/old/new/' fileのように行番号を先頭に付けます。パターンで指定する方法もあります。

macOSでは動きが違うと聞きましたが?

macOSのsed(BSD版)では-iの後ろに拡張子の指定が必須など、GNU版と書式が異なります。本サイトはGNU sedを前提にしています。

関連ページ

あわせて覚えたいコマンド:grep・awk・cat・tail

sedが登場する章:中級 第7章

← Linuxコマンド一覧へ戻る