特定のコンテンツを含む.txtファイルを一覧表示するには?

特定のコンテンツを含む.txtファイルを一覧表示するには?

「Ubuntu」という単語を含むフルパスですべての.txtファイルを一覧表示する方法。テキスト以外のファイルは無視されます。値を比較するときは大文字と小文字を無視する必要があります。つまり、UBUNTU、ubuNtu、またはUbUnTuは、指定された検索構文と同じと見なされます。

答え1

GNU grep は glob パターンに基づく再帰検索をサポートします。たとえば、次のようになります。

grep --include='*.txt' -ril ubuntu /path/to/dir

正規表現を検索しない場合、-F固定文字列一致()を含めると、このプロセスははるかに高速になります。別の最適化は、-i必要でない場合は無視()を削除することです。

答え2

シンプルfind+grep解決策:

find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;

grep詳細:

  • l- 代わりに通常の出力を抑制します。 print は通常、各入力ファイルの名前を印刷します。
  • i- 大文字と小文字が異なる文字が互いに一致するように大文字と小文字の違いを無視します。

答え3

このユーティリティの一部の実装には、バイナリを無視するフラグがgrepあります。正規表現の代わりに大文字と小文字を区別しない一致と固定文字列の一致を使用することもできます。別に探しているなら-Igrep-i-F性格-w一部の実装の機能を使用する必要がありますgrep。その後、サブディレクトリに再帰的に移動するには、再帰を使用してファイルを検索-Rし、パターン一致を-l含むファイル名を取得できます。次に、特定の拡張子を持つファイルのみを表示できる--includeGNUがある場合は、それを使用したいと思います。grep

grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir

使用される標準オプション:-F、、、-i-l

使用されている非標準オプション(一部の実装でサポートされてgrepいます):-w、、、、。-I-R--include


のないfindOpenBSDを代わりに使用します(GNUにもこのフラグがあります)。grep--include--binary-files-Igrep

find /path/to/top/dir -type f -name '*.txt' \
    -exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +

答え4

これが私が一般的に使用するものです:

find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;

関連情報