指定された単語を含むファイルを再帰的かつ一意に一覧表示したいと思います。
例:「check」という単語をチェックしています。通常はgrepです
$ grep check * -R
しかし、この単語は頻繁に出現するため、多くの出力が得られます。したがって、指定された検索語を含むファイル名をリストする必要があります。 find
とxargs
を使ったトリックで十分だと思いますが、わかりません。
何かアイデアはありますか?
回答
-l
または--files-with-matches
オプション:
通常の出力を抑制します。代わりに、通常は出力が出力される各入力ファイルの名前を出力します。スキャンは最初の一致で停止します。 (
-l
はPOSIXで指定されています。)
たとえば、次の例を使用できます。
$ grep check * -lR
コメント
回答
find . -type f -exec grep -l check {} +
最新バージョンのGNU -R
オプションを使用したくない場合があります。 div id = “30ccdcbc3b”>
は、ディレクトリを降順するときにシンボリックリンクをたどります。代わりに、バージョン2.12(2012年4月)以降はシンボリックリンクをたどらない-r
オプションを使用してください。
grepがGNUのものではない場合、バージョン2.12より古い場合、またはコードを非ブリーディングエッジGNUシステムに移植可能にする必要がある場合は、find
コマンド。
それ以外の場合は、次の操作を実行できます。
grep -rl check .
*
(現在のディレクトリ(および現在のディレクトリのみ)の非表示ファイルが省略され、名前が-
で始まるファイルで問題が発生するため)、渡さないでください引数の後のオプションは保証されていません環境に応じて動作するように設計されており、移植性はありません。
回答
これを試してください:
find . -type f | xargs grep -c check $1 | grep -v ":0"
grep
フラグについては…
-c
はファイル名の後に:と、指定されたファイルに検索文字列が表示される回数を示す数値を返します。
-v
は最初の
検索し、結果がゼロのファイルを除外し、結果がゼロ以外のファイルのみを出力します。
コメント
- 名前に
:0
が含まれているファイル(またはディレクター)がある場合、これはフォールスネガティブになります。 'grep -v ':0$'
を実行することをお勧めします。それでも、改行を含むパス名で窒息します。
回答
grep -lR "text-to-find" <where-to-find>
も正常に機能します。
例:grep -lR "NAVIGATE" .
ここでNAVIGATE
という単語が.
。
回答
grep -rin “whatToFind” locationToFInd
eg $ grep -rin “vihaan”。
は、ファイル名と、「vihaan」が含まれる対応する行「。」を再帰的に検索して一覧表示します。現在のディレクトリを参照します。
回答
find . -type f | grep "keyword" *
現在のディレクトリを検索します。ルートから検索するには、.
回答
ivの代わりに/
を指定しますclass = “answer”>
grep -rli trim \` find . -name *.q \`
.q
ファイルのリストにキーワードtrim
grep -rl "text to find" "/usr/share"
を使用しましたが、うまくいきました!