Linuxで特定のテキストを含むすべてのファイルを見つける方法

linux text grep directory find


特定の文字列を含むすべてのファイルをLinuxシステム全体でスキャンする方法を見つけようとしています。はっきりさせたいのは、ファイル名ではなく、ファイル内のテキストを探しているということです。

どうすればいいのか調べていたら、この解決策に2回も出くわしました。

find / -type f -exec grep -H 'text-to-find-here' {} \;

しかし、うまくいきません。システム内のすべてのファイルを表示するようです。

これは正しい方法に近いのでしょうか?そうでない場合は、どのようにすればいいのでしょうか?ファイル内のテキスト文字列を見つけるこの機能は、私がやっているいくつかのプログラミングプロジェクトで非常に便利です。





Answer 1 rakib_


以下のようにしてください。

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r または -R は再帰的です。
  • -n は行番号であり、
  • -w は単語全体に一致することを意味します。
  • -l (小文字のL)を追加して、一致するファイルのファイル名だけを指定できます。

これらに --include--exclude-dir exclude 、 -- include 、 -- exclude -dirフラグを使用して効率的な検索を行うことができます。

  • これは.cまたは.hの拡張子を持つファイルのみを検索します。

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • これにより、拡張子が.oで終わるすべてのファイルの検索が除外されます。

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • ディレクトリの場合、 --exclude-dir パラメータを使用して特定のディレクトリを除外できます。 たとえば、dirs dir1 /、dir2 /、および* .dst /に一致するそれらすべてが除外されます。

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

これは、あなたのようなほぼ同じ目的を達成するために、私にとって非常によく機能します。

その他のオプションについては、 man grep を確認してください。




Answer 2 fedorqui 'SO stop harming'


grep -ilR を使用できます。

grep -Ril "text-to-find-here" /
  • 大文字小文字を区別しない(あなたの場合はオプション)。
  • R は再帰を表します。
  • l は「結果自体ではなく、ファイル名を表示する」を意味します。
  • / は、マシンのルートから始まることを意味します。



Answer 3 Stephan


ackを使用できます。 ソースコードのgrepのようなものです。 それでファイルシステム全体をスキャンできます。

そうしてくれ

ack 'text-to-find-here'

ルートディレクトリにある

正規表現を使用したり、ファイルタイプを指定したりすることもできます。


UPDATE

私はちょうどシルバーサーチャーを発見しました。これはackに似ていますが、それよりも3〜5倍速く、 .gitignore ファイルのパターンも無視します。




Answer 4 learner_19


使えます。

grep -r "string to be searched"  /path/to/dir

r は再帰を意味し、指定されたパスとそのサブディレクトリも検索します。 これにより、ファイル名がわかり、文字列が出現するファイルの行が出力されます。

または、すべてのjavascriptファイル(*.js)を検索するための、あなたが試しているのと同じようなコマンド(例:)。

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

これはテキストが表示されているファイルの行を印刷しますが、ファイル名は印刷されません。

このコマンドに加えて、次のように書くこともできます。grep -rn "検索する文字列" / path / to / directory / or / file -r:再帰検索 n:一致する行番号が表示されます




Answer 5 A R


これを使えばいいんです。

grep -inr "Text" folder/to/be/searched/