UNIX
ag

複数のファイルに対して、特定の語を一気に置き換え

More than 3 years have passed since last update.

unixの便利系コマンドを、すぐ忘れちゃうのでメモ。

たとえば、つくってるサイトのプロジェクト名が変わってしまったよ!というとき。

# project_aを含むファイルを、すべてproject_bに置き換えて保存

ag -l project_a | xargs sed -i '' -e 's/project_a/project_b/g'



  1. agで、特定の語を含むファイルをリスト


    • デフォルトの挙動では、マッチしたファイル名 + マッチした箇所 を出力してくれるので、-lオプションつけて、ファイル名だけ吐くようにしてもらう


    • findでがんばってもよいんだろうけど、いまどきagのほうが素直で速いでせう



  2. xargs <コマンド>に対して、ファイルリストを入力で渡すと、渡したファイルリストをコマンドで処理してくれる



  3. sedを使って、正規表現(-eで指定)でテキスト置き換えができる


    • 普通は、ファイル名を引数にとって置き換え後の内容を出力、という挙動


    • -i <バックアップ用拡張子名> で、置き換え後の内容を元のファイルに出力できる



sedの挙動は、環境によってはちょっと違うかも。

置き換えが正しくできているかどうか、git diffとかで確認できる状態にした上で実行しようね!