私はunixfind
コマンドが好きですが、プロジェクトを検索して、任意のディレクトリまたはサブディレクトリ内の任意のファイルでテキストを検索する場合は、常に「面倒」に使用できません。
これを行う簡単な方法はありますか?
5 に答える
grep
ユーティリティを試してください:
- ディレクトリツリー内の文字列を再帰的に検索するには:
使用する: grep -rl alvin .
- 複数のサブディレクトリを検索します。
再帰grep
検索は、現在のディレクトリだけに限定する必要はありません。次の例は、大文字と小文字を区別しない文字列"alvin"を2つの無関係なディレクトリで再帰的に検索する方法を示しています。
grep -ril alvin /home/cato /htdocs/zenf
- egrepを再帰的に使用する:
コマンドを使用して再帰検索を実行することもできます。このegrep
コマンドを使用すると、一度に複数のパターンを検索できます。
egrep -ril 'aja|alvin' .
この場合、検索パターンの前後に引用符が必要であることに注意してください。
概要:grep -rノート:
grep -r
コマンドに関するいくつかの注意事項:
このgrepコマンドは、 -l(小文字の「L」)フラグと一緒に使用しない限り、あまり意味がありません。このフラグは、一致するファイル名を出力するようにgrepに指示します。
grepコマンドの最後に1つ以上のディレクトリをリストすることを忘れないでください。ディレクトリを追加するのを忘れた場合、grepは(通常どおり)標準入力からの読み取りを試みます。
示されているように、大文字と小文字を区別しない-i、検索の意味を逆にする-vなど、他の通常のgrepフラグを使用することもできます。
git grep
これを行う1つの方法ですが、追跡されていないファイルは無視されます(したがって、これは、で行っていることとまったく同じではありませんfind
)。find
奇妙な構文を回避するための、これを実現する他のいくつかの方法:
grep -r "<string>" /path/to/repo
また、私の個人的なお気に入りgrep
の代替案であるackをgrep
試してみることもできます。これは、git grep
私の逸話的な経験の両方よりも優れています。
ack "<string>" /path/to/repo ;# path is unnecessary if you're already in the repo
Grepは最も単純なアプローチです。
grep -r 'text to find' .
git grep
アプリケーションのベースディレクトリにある「テキスト文字列」は、これを行うための優れた方法です。
クリストファーが指摘するように、またack
有用です。
彼のインストール方法は私にはうまくいきませんでした。私がしなければなりませんでした:
sudo apt-get install ack-grep
そして便宜上
alias ack='ack-grep ' # So that I can just type ack "string"
これもファイルに追加し~/.bash_aliases
ます。
大規模なプロジェクトでの検索が遅いことが心配な場合は、TheSilverSearcherをご覧ください。非常に高速です。75000行のプロジェクトでの文字列「TODO」のテスト実行には10ミリ秒もかかりませんでした。
READMEからの抜粋:
Agの何がそんなに素晴らしいのですか?
- ackよりも1桁高速です。
- .gitignoreおよび.hgignoreからのファイルパターンを無視します。
- ソースリポジトリに検索したくないファイルがある場合は、それらのパターンを.ignoreファイルに追加するだけです。(咳* .min.js咳)
- コマンド名はackより33%短く、すべてのキーがホーム行にあります。
Agは現在かなり安定しています。ほとんどの変更は、新機能、マイナーなバグ修正、またはパフォーマンスの改善です。私のベンチマークでは、Ackよりもはるかに高速です。
ack test_blah ~/code/ 104.66s user 4.82s system 99% cpu 1:50.03 total ag test_blah ~/code/ 4.67s user 4.58s system 286% cpu 3.227 total
AckとAgは同じ結果を見つけましたが、Agは34倍高速でした(3.2秒対110秒)。私の〜/codeディレクトリは約8GBです。git / hg / ignoreのおかげで、Agはそのうち700MBしか検索しませんでした。
たとえば、ほとんどのパッケージリポジトリからインストールできます。
apt-get install silversearcher-ag