複数のファイルの中にある同じ文字列をまとめて修正したいと思ったことはありませんか?
例えば、数百のテキストファイルに含まれる社名やURLを新しいものに置き換えたい場合、エディタで一つずつ開いて「検索と置換」をするのは現実的ではありません。
こうした場面で便利なのが、ターミナルでの一括置換です。特に sed
コマンドを使えば、大量のファイルでも一瞬で修正できます。
単一ファイルでの文字列置換
まずは基本的な使い方から見てみましょう。
sed -i 's/oldword/newword/g' target.txt
-i
: ファイルを直接修正する(バックアップを取りたい場合は-i.bak
などを指定)s/oldword/newword/g
:oldword
をnewword
にすべて置換target.txt
: 修正対象のファイル
この例では、target.txt
内の「oldword」がすべて「newword」に置き換わります。
複数ファイルをまとめて置換する
複数のファイルを対象にする場合はワイルドカードを使います。
sed -i 's/oldword/newword/g' *.txt
このコマンドを実行すると、カレントフォルダにある .txt
ファイルすべてで文字列が置換されます。
フォルダ全体のファイルを対象にする
サブフォルダも含めてまとめて修正したい場合は find
と組み合わせます。
find . -type f -name "*.html" -exec sed -i 's/oldlink.com/newlink.com/g' {} +
.
: カレントディレクトリを基点に検索-type f
: ファイルを対象にする-name "*.html"
:.html
ファイルを対象にする-exec sed -i ... {} +
: 見つかったファイルをすべて処理
これでプロジェクト内のすべてのHTMLファイルにある旧URLを新しいURLに置換できます。
実用シーン
- 社名や部署名などの表記を一括で修正したい
- ウェブサイトのURL変更に伴って大量のファイルを書き換えたい
- プログラムや設定ファイルの変数名をまとめて変更したい
日常的な文書整理からシステム管理まで、幅広い場面で役立ちます。
注意点
- 誤置換を防ぐために、最初は
-i
を付けずに出力確認するのがおすすめです。
sed 's/oldword/newword/g' target.txt
- 大量のファイルを一度に処理する場合は必ずバックアップを取ってから実行しましょう。
まとめ
大量のファイルに含まれる文字列をまとめて変更したいときは、sed
を活用すれば効率的に作業できます。
- 単一ファイルから複数ファイル、フォルダ全体まで対応可能
- 「検索と置換」を繰り返す手間を省き、数秒で一括修正できる
- 文書整理やプロジェクト管理に大きく役立つ
ファイル修正に時間をかけたくない方は、ぜひ取り入れてみてください。
コメント