Grepを使用してファイルシステム内のファイルから文字列を検索する

Grepを使用してファイルシステム内のファイルから文字列を検索する

文字列「RUSH2112」のファイルシステムから複数のファイルを検索する必要があります。次のコマンドを完了しましたが、これが正しいかどうかはわかりません。私はマウントされたファイルシステムに立っています。

find . -type f -exec grep -i1 "Rush2112" {} \; 

答え1

一つを探すひも(正規表現ではない)大文字と小文字を区別せずにgrep -iF STRINGSTRING探している引用文字列がどこにあるべきか)を使用します。

ディレクトリ階層のすべての一般ファイルを繰り返すには、次の手順を実行します。

find . -type f -exec grep -iF STRING /dev/null {} +

このコマンドとユーザーコマンドの主な違いは、grep見つかったファイルグループに対して実行されることです。見つかった各ファイルに対してコマンドがgrep一度実行され、ファイルが多いと速度が遅くなることがあります。これが+最終的に違いを生み出すものです。

別の違いは、grep複数のファイルで呼び出されるため、一致するエントリが見つかったファイルのパス名が出力に含まれることです。/dev/nullそこgrepこの動作は、単一のファイルのみを使用している場合に呼び出されます。実装に非標準(ただし一般的な)オプションがある場合は、インクルードの代わりにgrepオプションを使用できます。-H/dev/nullgrep

一部の実装には、grephelpなしでディレクトリ自体を再帰的に実行するオプションもありますfind。これは通常-Rオプションで行われます。

grep -R -iF STRING .

GNUにはこのオプションとはわずかに異なるオプションもgrepあります(使用する場合はシンボリックリンクに従わず、実行時に得られた動作と似ています)。-r-R-rgrepfind . -type f


探しているものがその文字列を含むファイルのパス名であり、一致するファイルの実際の行ではない可能性がある場合は、さまざまな方法でこれを行うことができます(上記と同様の方法ですべて同じ)。 )).

  • grep -q各ファイルのテストとして使用されます。

    find . -type f -exec grep -qiF STRING {} ';' -print
    
  • grep -l以下で見つかったファイルグループ全体で使用されますfind

    find . -type f -exec grep -ilF STRING {} +
    
  • 再帰を使用してくださいgrep -l

    grep -R -ilF STRING .
    

与えられた文字列を含むファイルをさらに処理するには、最初の選択肢を選択します。

find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
    for pathname do
        # Process "$pathname" here
    done' sh {} +

または、grepインラインスクリプト内で実行します。

find . -type f -exec sh -c '
    for pathname do
        if grep -qiF STRING "$pathname"; then
            # Process "$pathname" here
        fi
    done' sh {} +

関連:

関連情報