ファイル内の文字列を検索するより良い方法は?


0

ハードドライブのどこかのファイルで特定のテキスト文字列を見つけようとしています。これまでに思いついた最高のものは:

find -type f / | xargs cat | grep "string to find"

しかし、これは文字列がどこかに存在するかどうかを教えてくれます。

見つけたファイルを知るにはどうすればよいですか?

もっと良い方法はありますか?

回答:


4
find / -type f -exec grep "string" {} +

これにより、大文字と小文字を区別しない検索が実行されますが、検索は遅くなりますが、より柔軟になります。

find / -type f -exec grep -i "string" {} +

多くの結果が得られるので、それをより少ないパイプにパイプしてから、とを使用fbて、出力をページごとに前後にナビゲートできます。

find / -type f -exec grep -i "string" {} + | less

*.txtファイルを探していることがわかっている場合は、さらに絞り込むことができます。

find / -type f -name "*.txt" -exec grep -i "string" {} + | less

5

これはトリックを行う必要があり、はるかに簡単です:

grep -R "some string" /

-nを追加すると、必要な行番号が表示されます。

grep -Rn "some string" /

4

この場合、なぜ「cat」を使用するのですか?人々が理由なく「猫」を使用する方法はいつも奇妙です。ただやる:

find -type f / | xargs grep "string to find"

もちろん、ディスク全体のすべてのファイルの検索は非常に遅くなります。このような検索を頻繁に行う必要がある場合は、何らかのインデックスプログラムを使用した方がよいでしょう。たとえば、Beagleは非常に広範な検索エンジンであり、しばらく前から存在しています。その他のオプションは、KDEのStrigiまたはGoogleのデスクトップ検索です

少なくとも、「find」の代わりに「locate」を使用する必要があります。ファイル名のみをインデックスし、その内容はインデックスしませんが、それでも物事を高速化します。さらに、grepを使用する前に、ファイルタイプに基づいてフィルタリングする必要があります。たとえば、100MBのaviファイルなどでgrepを使用するのは時間の無駄です。



2

見つけたファイルを知るにはどうすればよいですか?

一致するファイルを印刷するには、「-H」とともに「grep」オプションを使用する必要があります。


また、

  • また、ルート( ' /')よりもわずかに優れた推測を使用することをお勧めします。
  • John「」演算子の-exec切り替えのスキームは、|多くのファイルが検索されている場合に役立ちます

3
+1-で検索を開始する必要はほとんどありません/。また/、通常のユーザーとして検索を開始すると、アクセス許可の問題のために大量のエラーメッセージが表示されることになります。
テレマコス

2
この場合、grep -Hは、 'cat'を冗長に使用するため機能しません。'stdin'を出力するだけです。彼が 'cat'を使用しなかった場合、grepのデフォルト設定は一致するファイルを出力するため、余分なフラグは必要ありません。
davr

1

はい、-rフラグを付けたgrepは再帰的に検索します。次のようなコマンドを試してください:

grep -ri 'hello' .

これは、現在のディレクトリ、およびその中のすべてのファイルとディレクトリを検索して、フレーズ「hello」を探します。-iフラグは大文字と小文字を区別しないため、「Hello」、「HELLO」なども検出されます。

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