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 と組み合わせて使います)。 |
| Nd | N行目を削除します。 |
| N,Md | N行目から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 ""』と空文字が必要)。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。