Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

sed

『sed』(Stream EDitor)はテキストを行単位で処理するコマンドです。置換・削除・挿入・抽出などの編集をファイルを開かずに行えます。スクリプトや自動化処理でよく使われます。

構文
sed [オプション] 'コマンド' [ファイル...]
sed [オプション] -e 'コマンド1' -e 'コマンド2' [ファイル...]
コマンド・オプション一覧
コマンド / オプション概要
s/置換前/置換後/各行の最初にマッチした部分を置換します。
s/置換前/置換後/g各行のすべてにマッチした部分を置換します(グローバル)。
s/置換前/置換後/i大文字小文字を区別せずに置換します。
-i ファイルファイルをインプレース(直接)編集します。
-i.bak ファイルバックアップを .bak に保存してからインプレース編集します。
-nデフォルトの出力を抑制します(p コマンドと組み合わせて使います)。
/パターン/dパターンに一致する行を削除します。
/パターン/pパターンに一致する行を出力します(-n と組み合わせて使います)。
NdN行目を削除します。
N,MdN行目からM行目を削除します。
/パターン/a テキスト一致する行の後にテキストを追加します。
/パターン/i テキスト一致する行の前にテキストを挿入します。
サンプルコード

以下のファイルを例に説明します。

# data.txt の内容:
# Hello World foo foo
# This is a foo test
# Another line here
#
# config.txt の内容:
# # Database settings
# host=localhost
# # Port number
# port=3306

『s/置換前/置換後/』で最初にマッチした部分を置換します。『g』を付けるとすべて置換します。

sed 's/foo/bar/' data.txt
Hello World bar foo
This is a bar test
Another line here
sed 's/foo/bar/g' data.txt
Hello World bar bar
This is a bar test
Another line here

『/パターン/d』でパターンに一致する行を削除します。コメント行(# で始まる行)を除外する例です。

sed '/^#/d' config.txt
host=localhost
port=3306

『/^$/d』で空行を削除します。

printf "line1\n\nline2\n\nline3\n" | sed '/^$/d'
line1
line2
line3

『-n』と『p』コマンドの組み合わせで、特定の行のみを抽出します。

sed -n '2,4p' config.txt
host=localhost
# Port number
port=3306

『-e』で複数の置換を一度に実行します。

sed -e 's/foo/bar/g' -e 's/World/Earth/' data.txt
Hello Earth bar bar
This is a bar test
Another line here

『-i』でファイルを直接編集します(インプレース置換)。『-i.bak』でバックアップを作成してから編集します。

sed -i 's/old/new/g' file.txt
sed -i.bak 's/old/new/g' file.txt

先頭と末尾の空白を削除します(トリム)。

echo "  hello world  " | sed 's/^[[:space:]]*//; s/[[:space:]]*$//'
hello world

1行目を削除します(CSVのヘッダーを除く場合などに使います)。

echo -e "name,age\nalice,30\nbob,25" | sed '1d'
alice,30
bob,25
概要

『sed -i』でインプレース編集するときは必ずバックアップを取るか、git 管理下で行うことを推奨します。macOS の場合は BSD sed を使用しているため、GNU sed と一部オプションの書き方が異なります(例:macOS では『sed -i ""』と空文字が必要)。

より複雑なテキスト処理には『awk』を使います。単純な検索は『grep』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。