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' file | 5〜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章