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


30

特定の単語を含むファイルを再帰的かつ一意にリストしたいと思います。

:単語 'check'を確認する、私は通常grepです

$ grep check * -R

しかし、この言葉の多くの出現があるので、私は多くの出力を得ます。そのため、指定された検索語を含むファイル名をリストするだけです。私はここでいくつかのトリックを推測しfindxargsここで十分でしょうが、確かではありません。

何か案は?

回答:


39

次のように文書化されている-lor --files-with-matchesオプションを使用します。

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

したがって、あなたの例では、次のものを使用できます。

$ grep check * -lR

MSYSでも機能します。すばらしいです!
コス

2
私は使用しgrep -rl "text to find" "/usr/share"、それはうまくいきました!
Shrout1 16

18
find . -type f -exec grep -l check {} +

おそらく-R、GNUの最新バージョンでは、grepディレクトリを下降するときにシンボリックリンクをたどるオプションを使用したくないでしょう。-r代わりに、バージョン2.12(2012年4月)以降のシンボリックリンクに従わないオプションを使用します。

grepがGNUのものではない場合、またはバージョン2.12より古い場合、またはコードを非出血エッジGNUシステムに移植可能にする必要がある場合は、find上記のコマンドを使用します。

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

grep -rl check .

使用しないでください*(現在のディレクトリ(および現在のディレクトリのみ)の隠しファイルを省略し、名前がで始まるファイルで問題が発生するため-)、引数によってオプションを渡すことは避けてください。環境とポータブルではありません。


1

これを試して:

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

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

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

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


名前にが含まれるファイル(またはディレクトリ)がある場合、これは偽陰性になります:0。行う方が良いですgrep -v ':0$'。それでさえ、改行を含むパス名で停止します。
スコット

0

grep -rin "whatToFind" locationToFInd

例:$ grep -rin "vihaan"。

ファイル名と、「vihaan」が含まれる対応する行「。」を再帰的に検索およびリストします。現在のディレクトリを参照します。



0

grep -lR "text-to-find" <where-to-find> また、正常に動作します。

例えば、 grep -lR "NAVIGATE" .私たちは言葉を見つけるNAVIGATEには.、現在のディレクトリに。


-2
 grep -rli trim \` find . -name *.q \` 

.qキーワードを含むファイルのリストを提供しますtrim

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.