目次
sed
コマンドとは?
sed
(Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。
ファイルを直接開くことなく、以下のようなテキスト操作を効率的に実行できます:
- 文字列の置換
- 行の削除や挿入
- パターンマッチングに基づく操作
sed
はスクリプトやコマンドラインでのデータ処理に非常に役立つツールです。
シェルスクリプトと自動化の基礎:sedコマンド詳細
Linuxで効率的なシステム管理を行うためには、シェルスクリプトや自動化ツールを理解することが重要です。本記事では、bash、cron、at、awk、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
解説:
変数を利用することで、柔軟な置換が可能になります。
注意点
-i
オプションでの上書きに注意
ファイルを直接編集する際は、必ずバックアップを作成しましょう。- 正規表現のエスケープ
特殊文字(例:/
,*
,.
)を使う場合は、エスケープが必要です。 - 大量のデータを扱う場合の性能
大規模なファイル処理には注意が必要です。awk
などの他のツールと組み合わせることも検討してください。