今更ですが、ag(The Silver Searcher) を積極的に使っていこうと思っています。
主に自分用のメモをここに書き溜めていくつもりです。
ag をよく知らない人のために
ag は Perl 製の ack と似たツールですが、高速に動作するのが特長です。
ディレクトリを再帰的に検索でき、便利な機能・オプションが色々あります。
Mac, Linux, BSD, Windows 各 OS に対応しています。
インストールガイド等は 公式の README をご参照下さい。
コマンド・フォーマット
ag --help
より。
ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]
# 例
ag -i foo /bar/
コマンドオプション
※今は一部しか載せていません。随時加筆予定。
出力オプション
option | 説明 |
---|---|
-l, --files-with-matches |
マッチしたファイル名のみ表示 |
検索オプション
option | 説明 |
---|---|
-G, --file-search-regex PATTERN |
正規表現で対象ファイルを絞り込み |
--ignore(-dir) PATTERN |
マッチするファイル・ディレクトリを対象から除外 |
--hidden |
隠しファイルを検索対象にする |
-i, --ignore-case |
大文字小文字の違いを無視 |
-s, --case-sensitive |
大文字小文字の違いを考慮する |
-S, --smart-case |
検索 PATTERN に大文字が含まれない限り、大文字小文字の違いを無視する(デフォルト) |
使用例
特定ディレクトリ以下のファイル群に対する文字列の一括置換操作
# lib/ 以下の *.rb を検索して foo => bar に一括置換
ag -l -G '\.rb$' foo lib/ | xargs perl -pi -e 's/foo/bar/g'
上のような操作は、今まで find ... | xargs perl -pi -e '...'
とやっていました1が、ag だとマッチするファイルだけに対象が絞り込まれるので、少し安心感がありますね。
ハマりどころ
デフォルトで --smart-case
が有効
何度か「あれっ?」となったのですが、オプションの項に載せている通り、デフォルトでは検索文字列に大文字を含まない限り、大文字小文字の違いを無視してくれるようです。
きっと、気を利かせてくれているのでしょう。
おわりに
随時更新予定です。