8

私はunixfindコマンドが好きですが、プロジェクトを検索して、任意のディレクトリまたはサブディレクトリ内の任意のファイルでテキストを検索する場合は、常に「面倒」に使用できません。
これを行う簡単な方法はありますか?

4

5 に答える 5

9

grepユーティリティを試してください:

  1. ディレクトリツリー内の文字列を再帰的に検索するには:

使用する: grep -rl alvin .

  1. 複数のサブディレクトリを検索します。

再帰grep検索は、現在のディレクトリだけに限定する必要はありません。次の例は、大文字と小文字を区別しない文字列"alvin"を2つの無関係なディレクトリで再帰的に検索する方法を示しています。

grep -ril alvin /home/cato /htdocs/zenf
  1. egrepを再帰的に使用する:

コマンドを使用して再帰検索を実行することもできます。このegrepコマンドを使用すると、一度に複数のパターンを検索できます。

egrep -ril 'aja|alvin' .

この場合、検索パターンの前後に引用符が必要であることに注意してください。

概要:grep -rノート:

grep -rコマンドに関するいくつかの注意事項:

  • このgrepコマンドは、 -l(小文字の「L」)フラグと一緒に使用しない限り、あまり意味がありません。このフラグは、一致するファイル名を出力するようにgrepに指示します。

  • grepコマンドの最後に1つ以上のディレクトリをリストすることを忘れないでください。ディレクトリを追加するのを忘れた場合、grepは(通常どおり)標準入力からの読み取りを試みます。

  • 示されているように、大文字と小文字を区別しない-i、検索の意味を逆にする-vなど、他の通常のgrepフラグを使用することもできます。

于 2015-01-06T11:45:58.847 に答える
2

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
于 2012-08-10T12:58:22.043 に答える
2

Grepは最も単純なアプローチです。

grep -r 'text to find' .
于 2019-03-06T20:37:04.583 に答える
1

git grepアプリケーションのベースディレクトリにある「テキスト文字列」は、これを行うための優れた方法です。

クリストファーが指摘するように、またack有用です。

彼のインストール方法は私にはうまくいきませんでした。私がしなければなりませんでした:

sudo apt-get install ack-grep

そして便宜上

alias ack='ack-grep '  # So that I can just type ack "string"

これもファイルに追加し~/.bash_aliasesます。

于 2012-08-09T16:15:32.107 に答える
1

大規模なプロジェクトでの検索が遅いことが心配な場合は、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

詳細な手順については、READMEを参照してください。

于 2017-05-19T08:54:31.690 に答える