🔎

ディレクトリ配下のファイルをキーワード検索して一括置換する

2024/09/04に公開

結論

ディレクトリ配下のファイルをキーワード検索して一括置換する

ag -l 'keyword' | xargs perl -pi -e 's/old/new/g'

解説

キーワード検索

全文検索を使います。

ag -l 'keyword' 

-l オプションは、マッチしたファイル名だけを表示します。デフォルトだと、ファイルのキーワードの入っている行を表示してくれます。

私はSilver Searcherを使っていますが、別のものを使っても良いと思います。

https://github.com/ggreer/the_silver_searcher

ファイルごとに置換処理を実行

xargsag の出力(ファイル名)を perl に引数として渡して、 perl で置換を実行します。

xargs perl -pi -e 's/old/new/g':
  • -p: 各行を処理し、出力
  • -i: ファイルをその場で編集
  • -e: Perl コードを実行
  • 's/old/new/g': old を new に置換

MacにはPerl 5が入っているので、インストール不要でありがたい。

https://github.com/Perl/perl5

perl --version

This is perl 5, version 34, subversion 1 (v5.34.1) built for darwin-thread-multi-2level
...

あとがき

単一のファイルであれば、Vimなどで :%s/old/new/g すればいいですが、数が多いと面倒なので、一括でやるためのスクリプトでした。

変更するときは、Silver Searcherで変更される対象を見ておくと良いと思います。

ag 'keyword' 

Discussion