1. ホーム
  2. linux

[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?

2022-03-14 04:57:45

質問

私は、Linuxシステム全体から、特定の文字列を含むすべてのファイルをスキャンする方法を見つけようとしています。明確にするために、私はファイル名ではなく、ファイル内のテキストを探しています。

その方法を調べていたところ、この解決策に2度出会いました。

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

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

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

どのように解決するのですか?

以下を実行してください。

grep -rnw '/path/to/somewhere/' -e 'pattern'

  • -r または -R は再帰的です。
  • -n は行番号、そして
  • -w は単語全体のマッチを意味する。
  • -l (小文字のL)を付けると、マッチしたファイルのファイル名だけを与えることができます。
  • -e は検索時に使用されるパターンです

これらと一緒に --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"

  • ディレクトリの場合、1つまたは複数のディレクトリを除外するには --exclude-dir パラメータを使用します。例えば、dir1/, dir2/ と *.dst/ にマッチする全てのディレクトリを除外します。
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"

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

その他のオプションについては man grep .