【コマンド詳細】sedコマンドの使い方とオプションまとめ

  • URLをコピーしました!
目次

sed コマンドとは?

sed (Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。
ファイルを直接開くことなく、以下のようなテキスト操作を効率的に実行できます:

  • 文字列の置換
  • 行の削除や挿入
  • パターンマッチングに基づく操作

sedはスクリプトやコマンドラインでのデータ処理に非常に役立つツールです。

コマンド構文

sed [オプション] 'スクリプト' ファイル
  • スクリプト: 実行するコマンド(例: s/置換前/置換後/
  • ファイル: 処理対象のファイル

基本的な例

sed 's/old/new/' file.txt

上記は、ファイル内の「old」を「new」に置換します。

主なオプション一覧

オプション説明
-e複数のスクリプトを指定して実行
-iファイルを直接編集(バックアップが必要な場合はオプション付きで指定)
-n出力を抑制し、p コマンドで指定した部分のみを出力
-fスクリプトを記述したファイルを指定
-r拡張正規表現を有効化
-l NUM出力行の幅を指定(デフォルト: 70)

sed の基本コマンド

コマンド説明
s/pattern/replacement/パターンマッチングに基づく置換。g を付けるとすべての一致箇所を置換
d指定した行を削除
p指定した行を出力
a\text指定した行の直後にtextを挿入
i\text指定した行の直前にtextを挿入
q処理を終了
/pattern/特定のパターンに一致する行を操作

使用例と出力結果

1. 文字列の置換

例: file.txt内の「hello」を「world」に置換
sed 's/hello/world/' file.txt
出力例
ファイル file.txt の内容が以下の場合
hello there!
goodbye hello!
実行結果:
world there!
goodbye hello!
解説

s/hello/world/ は、最初に見つかった「hello」を「world」に置換します。

すべての「hello」を置換したい場合、g フラグを追加します

sed 's/hello/world/g' file.txt

2. 特定の行を削除

例: 2行目を削除
sed '2d' file.txt
出力例
元の内容が以下の場合
Line 1
Line 2
Line 3
実行結果:
Line 1
Line 3
解説
  • 2d は、2行目を削除するコマンドです。
  • 複数行を削除する場合は範囲を指定します(例: 2,3d)。

3. ファイルの内容を直接変更

例: ファイル内の「Linux」を「Unix」に置換し、内容を上書き
sed -i 's/Linux/Unix/g' file.txt
解説

-i オプションを使うと、変更をファイルに直接反映します。
変更前のバックアップを作成したい場合は以下のように指定します:

sed -i.bak 's/Linux/Unix/g' file.txt

4. 特定の行にテキストを挿入

例: 3行目の後に「New Line」を追加
sed '3a\New Line' file.txt
出力例
元の内容
Line 1
Line 2
Line 3
実行結果:
Line 1
Line 2
Line 3
New Line

5. 複数条件を一度に処理

例: 複数の置換を一度に実行
sed -e 's/Linux/Unix/' -e 's/Hello/Hi/' file.txt
解説

-e オプションを使うことで、複数の操作を連続して適用できます。

6. 正規表現を使ったパターンマッチング

例: 先頭に「#」が付いている行を削除
sed '/^#/d' file.txt
解説

/^#/ は、行の先頭に「#」があるパターンを示します。この行を削除します。

7. 出力を抑制して必要な部分だけ表示

例: ファイル内で「error」を含む行だけ表示
sed -n '/error/p' file.txt
出力例
error: File not found
error: Access denied
解説
  • -n オプションは、通常の出力を抑制します。
  • /error/p は、パターン「error」を含む行だけを出力します。

応用例

1. ファイル名を使った一括置換

例: .txt ファイル内の「foo」を「bar」に置換
sed -i 's/foo/bar/g' *.txt
解説

ワイルドカードを使うことで、複数のファイルを一括で処理可能です。

2. Bashスクリプトでの利用

例: 動的な置換
#!/bin/bash
old="foo"
new="bar"
sed -i "s/$old/$new/g" file.txt
解説

変数を利用することで、柔軟な置換が可能になります。

注意点

  1. -i オプションでの上書きに注意
    ファイルを直接編集する際は、必ずバックアップを作成しましょう。
  2. 正規表現のエスケープ
    特殊文字(例: /, *, .)を使う場合は、エスケープが必要です。
  3. 大量のデータを扱う場合の性能
    大規模なファイル処理には注意が必要です。awk などの他のツールと組み合わせることも検討してください。
    目次