agとは
ag
は grep
のように、ファイルから文字列を検索するツールです。
grepよりも高速に動作するため、大きなプロジェクトやログファイルで検索をする場合にとても便利です。
grepに比べて何がいいか
- 高速
-
gitignore
にあるファイルを検索対象外にできる - 隠しファイルはデフォルトで検索対象外
- grepの
-ir
オプション(大文字小文字無視でディレクトリを再帰的に検索)がデフォルト - コマンドも短く、結果が見やすい(後述)
grepと結果を比較
grepとagの実行結果を比べると、このようになります。
agのほうがコマンドがとても簡単で、結果も見やすいことがわかるかと思います。
$ grep -rn test *
a/a.txt:1:test1
a/a.txt:2:test2
b/b.txt:1:test1
b/b.txt:2:test2
$ ag test
a/a.txt
1:test1
2:test2
b/b.txt
1:test1
2:test2
インストール
インストール方法はGitHubの Installing
という箇所にOS別で記載されています。
CentOSの場合は以下のようになります。
$ su -
# git clone https://github.com/ggreer/the_silver_searcher.git
# cd the_silver_searcher
# yum -y groupinstall "Development Tools"
# yum -y install pcre-devel xz-devel
# ./build.sh
# make install
環境によっては、build.shにて以下のようなエラーが出ることがあります。
aclocal:configure.ac:71: warning: macro `AM_COND_IF' not found in library
その場合は、tarをダウンロードしてインストールする手順を実行しましょう。
# wget http://geoff.greer.fm/ag/releases/the_silver_searcher-0.31.0.tar.gz
# tar xvzf the_silver_searcher-0.31.0.tar.gz
# cd the_silver_searcher-0.31.0
# ./configure
# make
# make install
便利な使い方
特定のディレクトリを除外して検索
--ignore-dir
オプションをつけることで、特定のディレクトリを除外することが可能です。
複数のディレクトリを除外したい場合は複数回入力します。
# 普通に検索
$ ag test
a/a.txt
1:test1
2:test2
b/b.txt
1:test1
2:test2
# bディレクトリを除外して検索
$ ag --ignore-dir b test
a/a.txt
1:test1
2:test2
正規表現で検索
agでもgrepと同様に正規表現を使うことができます。
$ ag "test\d*"
a/a.txt
1:test1
2:test2
b/b.txt
1:test1
2:test2
小文字だけを入力した場合は大文字小文字を無視し、大文字を入力した場合は厳密に検索
-S
オプションを使うと、小文字だけを入力した場合は大文字小文字を無視し、大文字を入力した場合は厳密に検索するようになります。aliasに設定しておくのもおすすめです。
# 小文字の場合は大文字小文字を無視(つけても変わらない)
$ ag -S test
a/a.txt
1:test1
2:test2
b/b.txt
1:Test1
2:test2
# 大文字の場合は厳密に検索
$ ag -S Test
b/b.txt
1:Test1