Silver Searcherを使用して、どのように検索できますか?
その他の設定:大文字と小文字を区別せずに検索し、ドットファイルを検索したいとします。
あまり運のないこれを使用してエイリアスを試しました:
alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"
ag
のmanページによると
-G --file-search-regex PATTERN
Only search files whose names match PATTERN.
-G
オプションを使用して、パターンに一致するファイルを検索できます。
だから、あなたの質問に答えるには:
root@Apache107:~/rpm-4.12.0.1# ag -G cpio.c size
rpm2cpio.c
21: off_t payload_size;
73: /* Retrieve payload size and compression type. */
76: payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
上記のコマンドは、パターンcpio.c
に一致するすべてのファイルでWord size
を検索します
参照:ag
バージョン0.28.0のmanページ
特定のファイルタイプ、たとえばすべてのCソースコードで文字列を検索する場合、ag
に ドキュメント化されていない機能 があり、検索を特定のファイルタイプにすばやく制限できます。
以下のコマンドは両方とも、すべてのphpファイルでfoo
を探します。
find . -name \*.php -exec grep foo {}
ag --php foo
find + grep
はすべての.php
ファイルを検索しますが、ag
コマンドの--php
スイッチは実際には次のファイル拡張子を検索します。
.php .phpt .php3 .php4 .php5 .phtml
C++ソースファイルの場合は--cpp
、--hh
ファイルの場合は.h
、JavaScriptの場合は--js
などを使用できます。完全なリストは こちら で確認できます。
これを試して:
find . | ag "/.*SEARCHTERM[^/]*$"
コマンドfind .
はすべてのファイルをリストします。
その出力をコマンドag "/.*SEARCHTERM[^/]*$"
にパイプします。これは、フルパスだけでなく、ファイル名に含まれている場合はSEARCHTERMに一致します。
これをエイリアスファイルに追加してみてください。 zshでテストされていますが、bashで動作するはずです。この例で発生した問題は、bashエイリアスがパラメーターを取得できないことです。そのため、最初にパラメーターを使用する関数を定義し、次にその関数にエイリアスを割り当てる必要があります。
searchfunction() {
echo $(ag -g $1 --hidden)
echo $(ag --hidden -l $1)
}
alias search=searchfunction
この例は、いくつかの方法で目的に合わせて変更できます。
-l
フラグを追加/削除します[編集:Pablo Bianchiのコメントに従って不要な--smart-caseフラグを削除]
私自身も同じ答えを探しているこの質問を見つけました。 ag
には、ファイル名とディレクトリ名を検索するネイティブ機能がないようです。上記のZach FoggとJikku Joseの回答はどちらも機能しますが、パイピングfind .
大きなディレクトリで作業している場合、非常に遅くなる可能性があります。
find
を直接使用することをお勧めします。これは、ag
をパイプするよりもはるかに高速です。
Linux(find
のGNUバージョン)
find -name [pattern]
OSX(find
のBSDバージョン)
find [pattern]
find
についてさらにヘルプが必要な場合は、デジタルオーシャンの このガイド が最適です。 find
のmanページは、基本的な使用法を理解したいだけでは途方もなく密集しているので、これを含めます。
以前の回答に追加するには、 "または"正規表現 を使用して、異なるファイル拡張子に一致するファイル内を検索できます。
たとえば、C++ヘッダーファイル[。hpp]およびMakefiles [。mk]):
ag -G '.*\.(hpp|mk)' my_string_to_search
mdfind
、find
、locate
、およびその他の試みに満足できなかった後、次の方法でうまくいきました。 tree
を使用してファイルの初期リストを取得し、ag
を使用してディレクトリをフィルターで除外し、次にawk
を使用して一致するファイル自体を出力します。
tree
を使用したのは、他のソリューションよりも(そして簡単に)構成可能であり、高速であるためです。
これは魚の機能です:
function ff --description 'Find files matching given string'
tree . --Prune --matchdirs -P "*$argv*" -I "webpack" -i -f --ignore-case -p |
ag '\[[^d].*' |
awk '{print $2}'
end
これにより、次のような出力が得られます。
~/temp/hello_world $ ff controller
./app/controllers/application_controller.rb
./config/initializers/application_controller_renderer.rb
~/temp/hello_world $