web-dev-qa-db-ja.com

テキストに特定の単語を含むファイルを一覧表示する

特定のWordを含むファイルを再帰的かつ一意に一覧表示したいと思います。

:Word 'check'のチェック、私は通常grepを行います

$ grep check * -R

しかし、このWordの出現回数が多いため、多くの出力が得られます。したがって、指定した検索ワードを含むファイル名をリストするだけです。ここではfindxargsを使用したトリックで十分だと思いますが、確かではありません。

何か案は?

30
mtk

使用 -lまたは--files-with-matchesオプションは次のように文書化されています。

通常の出力を抑制します。代わりに、通常は出力が出力される各入力ファイルの名前を出力します。スキャンは最初の一致で停止します。 (-lはPOSIXで指定されています。)

したがって、たとえば、次のように使用できます。

$ grep check * -lR
40
N.N.
_find . -type f -exec grep -l check {} +
_

おそらく_-R_オプションを使用する必要はありません。これは、GNU grepの最新バージョンでは、ディレクトリの降順時にシンボリックリンクをたどります。_-r_オプションを使用してください。代わりに、バージョン2.12(2012年4月)以降、シンボリックリンクを追跡しなくなりました。

GrepがGNU 1でない場合、またはバージョン2.12よりも古い場合、またはコードを最新のEdge-GNUシステムに移植できるようにする必要がある場合は、find上記のコマンド。

それ以外の場合は、次のことができます。

_grep -rl check .
_

_*_を使用しないでください(現在のディレクトリ(および現在のディレクトリのみ)の隠しファイルが省略され、名前が_-_で始まるファイルで問題が発生するため)。引数は、環境によっては動作することが保証されておらず、移植性がないためです。

18

これを試して:

find . -type f | xargs grep -c check $1 | grep -v ":0"

grepフラグについては...

-cは、ファイル名の後に:と、指定したファイルに検索文字列が出現する回数を示す数値を返します。

-vは、最初のgrep検索からの出力を取得し、結果がゼロのファイルをフィルタリングして、結果がゼロ以外のファイルのみを出力します。

1
brightwellcd

grep -lR "text-to-find" <where-to-find>も問題なく機能します。

例:grep -lR "NAVIGATE" .の場合、現在のディレクトリの.にWord NAVIGATEが見つかります。

1
imsrgadich

grep -rin "whatToFind" locationToFInd

例:$ grep -rin "vihaan"。

ファイル名とそれに「vihaan」が含まれる対応する行「。」を再帰的に検索して一覧表示します。現在のディレクトリを参照します。

0
Vihaan Verma
find . -type f | grep "keyword" *

現在のディレクトリを検索します。ルートから検索するには、/ではなく.を指定します

0
Maniraja Jorige