1. ホーム
  2. regex

[解決済み] sed 初心者: フォルダ内のすべてのオカレンスを変更する

2022-08-24 22:29:42

質問

あるフォルダ(とそのサブフォルダ)内のすべてのファイルに対して正規表現による検索と置換を実行する必要があります。それを行うためのlinuxのシェルコマンドは何でしょうか?

たとえば、私はすべてのファイル上でこれを実行し、古いファイルを新しい、置き換えられたテキストで上書きしたいです。

sed 's/old text/new text/g' 

どのように解決するのですか?

sedだけではどうしようもありません。少なくともfindユーティリティを併用する必要があります。

find . -type f -exec sed -i.bak "s/foo/bar/g" {} \;

このコマンドは .bak ファイルを作成します。

注意事項

  • -i の引数は sed コマンドは GNU 拡張なので、もしこのコマンドを BSD の sed でこのコマンドを実行している場合は、出力を新しいファイルにリダイレクトし、そのファイル名を変更する必要があります。
  • find ユーティリティは -exec 引数を実装していませんので、古い UNIX ボックスでは | xargs を使う必要があります。